博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lerning Entity Framework 6 ------ Introduction to TPH
阅读量:7163 次
发布时间:2019-06-29

本文共 3082 字,大约阅读时间需要 10 分钟。


Sometimes, you have created two models. They have the same parent class like this:

public class Person{    public int PersonId { get; set; }    public string PersonName { get; set; }}public class InsidePerson : Person{    public string Title { get; set; }    public string Department { get; set; }}public class OutsidePerson : Person{    public string CompanyName { get; set; }}

After you execute the command Update-Database in nuget command line, Entity Framework will create one table named people:

图片.png-6.6kB

The Discriminator column is created for discriminating what model dose current row represent. this model creating type is called TPH(Table per Hierarchy Inheritance). Let's do a test. Add some codes in main function:

static void Main(string[] args){    using (MyDbContext db = new MyDbContext())    {        Person insidePerson1 = new InsidePerson()        {            PersonName = "InsidePerson1",            Title = "Manager",            Department = "development"        };        db.People.Add(insidePerson1);        InsidePerson insidePerson2 = new InsidePerson()        {            PersonName = "InsidePerson2",            Title = "Manager",            Department = "development"        };        db.People.Add(insidePerson2);        InsidePerson insidePerson3 = new InsidePerson()        {            PersonName = "InsidePerson3",            Title = "Manager",            Department = "development"        };        db.InsidePeople.Add(insidePerson3);        Person outsidePerson1 = new OutsidePerson()        {            PersonName = "outsidePerson1",            CompanyName = "Tencent"        };        db.People.Add(outsidePerson1);        db.SaveChanges();    }}

Let's look at the database:

图片.png-6.6kB

If you don't like the discriminator column which entity framework auto create, you can define your column by adding these codes in OnModelCreating function of DbContext class:

protected override void OnModelCreating(DbModelBuilder modelBuilder){    base.OnModelCreating(modelBuilder);    modelBuilder.Entity
() .Map
(p => p.Requires("PersonType").HasValue(1)) .Map
(p => p.Requires("PersonType").HasValue(2));}

Then, execute the command Add-Migration AddPesonTypeColumn2PeopleTable and Update-Database in nuget command line. Now, look at the database again:

图片.png-6.5kB

We can find the Entity Framework can't insert any value into PersonType column of existed rows. It's a little sad. Now, We insert some new data by coding:

static void Main(string[] args){    using (MyDbContext db = new MyDbContext())    {        Person insidePerson4 = new InsidePerson()        {            PersonName = "InsidePerson4",            Title = "Manager",            Department = "development"        };        db.People.Add(insidePerson4);        Person outsidePerson2 = new OutsidePerson()        {            PersonName = "outsidePerson2",            CompanyName = "Baidu"        };        db.People.Add(outsidePerson2);        db.SaveChanges();    }}

Look at the databas again:

图片.png-9.1kB

That's all.

转载于:https://www.cnblogs.com/zzy0471/p/6811269.html

你可能感兴趣的文章