Ef core中,定义实体类间的关系与它与表的映射形式!

学习 Ef core in actioin 的第2章总结:  格式较乱,自己懂

一、 1 对  0,1 的关系 :

5f0d74a682bed07f50e485bf89dcd1dfec6.jpg

类型书      书的价格商
说明

一个纯类

先存在,主实体

有一个外键

后产生的类,有外键,依赖主实体

代码 

public class Book 

{

public int BookId { get; set; }  
public string Title { get; set; }
...........
public PriceOffer Promotion { get; set; }

我以为,不需要上面这句

}

public class PriceOffer 

{

public int PriceOfferId { get; set; }
public decimal NewPrice { get; set; }
public string PromotionalText { get; set; }
public int BookId { get; set; } //#b

 public Book Book{get;set;} //我以为

}

反思:  我认为价格商表是从表,上表格中红色的句子,它应该有一个Book的导航属性就对了, 

但是作者是反其道而行之。  在从类里写一个外键属性!

这两种写法,生成的库表一样: fa4e112cd01a39b25bd465c215d5babb824.jpg

 

,但是生成迁移语句可以看到:

58ca295d8bdc97efd046bcde35cb60f303d.jpg

它们的区别在EF CORE的删除行为一节中有说明:  感觉作者的写法是正确的!

e304c4bf27a37ffd08dfb5bacaa94a90024.jpg

二、1  对   0,* 的关系

0b18982c373715430d5be75206376dfef58.jpg

类型书      书的 审核人
说明

一个纯类

先存在,主实体

有一个外键

后产生的类,有外键,依赖主实体

代码 

public class Book 

{

public int BookId { get; set; }  
public string Title { get; set; }
...........
public ICollection<Review> Reviews { get; set; }

}

   public class Review                      //#L
    {
        public int ReviewId { get; set; }
        public string VoterName { get; set; }
        public int NumStars { get; set; }
        public string Comment { get; set; }

         public int BookId { get; set; }       //#M
    }

行为和1对1是一样的,只是导航属性写成 ICollection<Review>,  删除行为也是Cascade.

三,多 对 多的关系 

4c63b6616315825663fd069b8204635603e.jpg

类型书      书的 作者关系表
说明

一个纯类

先存在,主实体

一个纯类

主实体

 
代码 

public class Book 

{

public int BookId { get; set; }  
public string Title { get; set; }
...........
public ICollection<BookAuthor> 
            AuthorsLink { get; set; }   

}

    public class Author                          //#E
    {
        public int AuthorId { get; set; }
        public string Name { get; set; }

     

        public ICollection<BookAuthor> 
            BooksLink { get; set; }  
         
    }

    public class BookAuthor                    //#G
    {
        public int BookId { get; set; }        //#H
        public int AuthorId { get; set; }      //#H
        public byte Order { get; set; }        //#I

        public Book Book { get; set; }        
        public Author Author { get; set; }  

    }

生成的库表:

de456659609007971011ca80227ab16e059.jpg

四、显示加载属性

              db.Authors.Include(p => p.BooksLink)

60d3253d966cb40815aaaf411342a7e8d91.jpg     collection 加载数组属性    reference加载单个属性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/1540190/blog/3089453

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值