Entity Framework with MySQL 學習筆記一(繼承)

來源:互聯網
上載者:User

標籤:style   blog   http   color   ar   os   sp   div   on   

基本上sql中要表示繼承關係有3中方式.

分別是,1表繼承(TPH),2表繼承(TPC),3表繼承(TPT) 

 

1表 : 

Person 

id  type  name  classroom  office 

1  student  keat       1B      null

2      teacher  xinyao    null       Lv2-T2

好處是不用 inner join 快,壞處是null 很多,浪費空間, column很長不好看。 

 

2表: 

這個很瞎不要學 .. , 大概就是沒有父表,字表很多,但是每個column都重複寫...無言

 

3表: (3隻是代號,其實是看子類多少就多少表,子表的 id 是跟父表一樣的)

Person 

id  name

Student

id  classroom 

Teacher

id  office 

這樣就沒有null了,只是要inner join 會慢

 

entity 是用 Fluent API 來實現的

3表方式 

    [Table("person")]    public class Person    {        [Key]        public Int32 id { get; set; }        public string name { get; set; }    }    //子類不要寫 [table("")]public class Student : Person    {        public string classroom { get; set; }    }public class Teacher : Person    {        public string office { get; set; }    }

Fluent API

    protected override void OnModelCreating(DbModelBuilder modelBuilder)    {        modelBuilder.Entity<Person>().  //對Person            Map<Student>(s => s.ToTable("student")). //map 另外2個table , "student" 是tableName            Map<Teacher>(t => t.ToTable("teacher"));        base.OnModelCreating(modelBuilder);    }

 insert 的話直接執行個體化字類就可以了 

    db.students.Add(new Student    {        name = "keatkeat",        classroom = "1B"    });    db.SaveChanges();
View Code

 

1表方式 : 

    [Table("person")]    public class Person    {        [Key]        public Int32 id { get; set; }        public string name { get; set; }    }     /*         子類千萬不要寫 [Table()] 了     */    public class Student : Person    {        public string classroom { get; set; }    }        public class Teacher : Person    {        public string office { get; set; }    }

Fluent API

    protected override void OnModelCreating(DbModelBuilder modelBuilder)    {        modelBuilder.Entity<Person>()                .Map<Student>(s => s.Requires("type").HasValue("student"))                .Map<Teacher>(m => m.Requires("type").HasValue("teacher"));        base.OnModelCreating(modelBuilder);    }

 

Entity Framework with MySQL 學習筆記一(繼承)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.