学习 Ef core in actioin 的第2章总结: 格式较乱,自己懂
一、 1 对 0,1 的关系 :
类型 | 书 | 书的价格商 |
说明 | 一个纯类 先存在,主实体 | 有一个外键 后产生的类,有外键,依赖主实体 |
代码 | public class Book { public int BookId { get; set; }
} | public class PriceOffer { public int PriceOfferId { get; set; }
} |
反思: 我认为价格商表是从表,上表格中红色的句子,它应该有一个Book的导航属性就对了,
但是作者是反其道而行之。 在从类里写一个外键属性!
这两种写法,生成的库表一样:
,但是生成迁移语句可以看到:
它们的区别在EF CORE的删除行为一节中有说明: 感觉作者的写法是正确的!
二、1 对 0,* 的关系
类型 | 书 | 书的 审核人 |
说明 | 一个纯类 先存在,主实体 | 有一个外键 后产生的类,有外键,依赖主实体 |
代码 | public class Book { public int BookId { get; set; } } | public class Review //#L public int BookId { get; set; } //#M |
行为和1对1是一样的,只是导航属性写成 ICollection<Review>, 删除行为也是Cascade.
三,多 对 多的关系
类型 | 书 | 书的 作者 | 关系表 |
说明 | 一个纯类 先存在,主实体 | 一个纯类 主实体 | |
代码 | public class Book { public int BookId { get; set; } } | public class Author //#E
public ICollection<BookAuthor> | public class BookAuthor //#G public Book Book { get; set; } |
生成的库表:
四、显示加载属性
db.Authors.Include(p => p.BooksLink)
collection 加载数组属性 reference加载单个属性