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

 

再重新生成數據庫,結果如圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM