Skip to content

Instantly share code, notes, and snippets.

@maxfridbe
Created November 15, 2012 16:43
Show Gist options
  • Save maxfridbe/4079647 to your computer and use it in GitHub Desktop.
Save maxfridbe/4079647 to your computer and use it in GitHub Desktop.
EF Inheritance
class Program
{
static void Main(string[] args)
{
var ctx = new Testctx();
var usr = new User() {username = "bob"};
ctx.Users.Add(usr);
ctx.SaveChanges();
var susr = new SiteUser() {site = "bobsite", User = usr};
ctx.SiteUsers.Add(susr);
ctx.SaveChanges();
var rusr = new RoleUser() { role = "bobrole", User = usr };
ctx.RoleUsers.Add(rusr);
ctx.SaveChanges();
ctx.SaveChanges();
var ru= ctx.RoleUsers.ToList();
}
}
public class User
{
public int UserId { get; set; }
public string username { get; set; }
}
public abstract class UserType
{
public virtual User User { get; set; }
public int UserId { get; set; }
}
public class RoleUser : UserType
{
public string role { get; set; }
}
public class SiteUser : UserType
{
public string site { get; set; }
}
public class Testctx:DbContext
{
static Testctx()
{
Database.SetInitializer(new DropCreateDatabaseAlways<Testctx>());
}
public DbSet<User> Users { get; set; }
public DbSet<SiteUser> SiteUsers { get; set; }
public DbSet<RoleUser> RoleUsers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasKey(u=>u.UserId).ToTable("User");
modelBuilder.Entity<RoleUser>().HasKey(u => u.UserId).ToTable("RoleUser");
modelBuilder.Entity<SiteUser>().HasKey(u => u.UserId).ToTable("SiteUser");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment