EF Code First 学习笔记,关于特性InverseProperty 使用遇到的一些问题

通过一些尝试,终于把设置这种特性不生效的原因给理出来了,,本人Model 引用了一个基类层,基类层是基础EF特性来做的,然而我更新了Model 的EF框架 层之后,导致两个版本框架不一致,最终出现了我下面说到的InverseProperty 不生效问题

 

一个实体多个引用的情况

我们来考虑一下下面的情况:

 1 public class Lodging
 2     {
 3         public int LodgingId { get; set; }
 4         public string Name { get; set; }
 5         public string Owner { get; set; }
 6         public bool IsResort { get; set; }
 7         public decimal MilesFromNearestAirport { get; set; } 
 8         public Destination Target { get; set; }
 9         //第一联系人
10         public Person PrimaryContact { get; set; }
11         //第二联系人
12         public Person SecondaryContact { get; set; } 
13     } 
14 
15     public class Person
16     {
17         public int PersonID { get; set; }
18         public string FirstName { get; set; }
19         public string LastName { get; set; }
20         public List<Lodging> PrimaryContactFor { get; set; }
21         public List<Lodging> SecondaryContactFor { get; set; } 
22     }
View Code

Lodging(旅店)有两个对Person表的引用,分别是PrimaryContact与SecondaryContact,同时,在Person表中也有对这两个联系人的导航:PrimaryContactFor与SecondaryContactFor。

看看Code First默认会生成怎样的数据库

Lodging(旅店)有两个对Person表的引用,分别是PrimaryContact与SecondaryContact,同时,在Person表中也有对这两个联系人的导航:PrimaryContactFor与SecondaryContactFor。

看看Code First默认会生成怎样的数据库

天哪,竟然生成了四个外键。因为有两套类型一样的导航属性与引用属性,Code First无法确定它们之间的对应关系,就单独为每个属性都创建了一个关系。这肯定不是我们所期望的,为了让Code First知道它们之间的对应关系,在这里要用到逆导航属性来解决。

使用Data Annotations:但是!!!!!,我用下面的第一种方法,未成功,具体原因不明,希望有知道的可以给我一些指点,最终用的第二种方法来时间的关系

1        //第一联系人
2         [InverseProperty("PrimaryContactFor")] 
3         public Person PrimaryContact { get; set; }
4         //第二联系人
5         [InverseProperty("SecondaryContactFor")] 
6         public Person SecondaryContact { get; set; } 
View Code

或使用Fluent API:

1  modelBuilder.Entity<Lodging>().HasOptional(l => l.PrimaryContact).WithMany(p => p.PrimaryContactFor);
2  modelBuilder.Entity<Lodging>().HasOptional(l=>l.SecondaryContact).WithMany(p=>p.SecondaryContactFor);
View Code

 

再重新生成数据库,结果如图:

转载于:https://www.cnblogs.com/prpr/p/5126017.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值