2016-02-08 25 views
0

我從數據庫EF項目創建Codefirst。這是從我生成的數據庫,我無法改變。我已經手動創建了表格之間的大部分關係,但是我已經用桌子撞牆了。如何在複合外鍵中使用NotMapped屬性

有兩個表

T1: FK3 
T2: PK1 PK2 PK3 

T1之間的關係:FK1 FK2是硬編碼邏輯。 因爲該表T1則FK1 = 「foo」 和FK2 = 「BAR」

我創建

T1 
[NotMapped] 
FK1 {get {return "FOO"}} 
[NotMapped] 
FK2 {get {return "BAR"}} 

用流利的API映射此

modelBuilder.Entity<T1> 
    .HasRequired<T2> 
    .WithMany() 
    .HasForeignKey(f => new {f.FK1, f.FK2, f.FK3 }) 

我得到的錯誤:

The foreign key component 'FK1' is not a 
declared property on type 'T1'. Verify that it has not been  
explicitly excluded from the model and that it is a valid primitive property. 

我該如何創建這種關係?我試過DataAnnotations fluentapi似乎無法處理它。

回答

0

您不能使用[NotMapped]屬性作爲關鍵字。未映射意味着exaclty - 「這是不會被映射到數據庫的c#代碼」。

但是,您可以使用[DatabaseGenerated(DatabaseGenerationOption.Computed)]並計算數據庫上的值:custom sequence string as sql identity column

PS:免費hazzle方式來聲明一個外鍵是[ForeignKey],只需使用一個int持有的ID。

+0

我將不得不使用.computed來修改數據庫是否正確?如果是這樣,我無法改變數據庫。 – EZE

+0

在PS上。我不確定你在說什麼。我有3個外鍵用於該實體。我已經嘗試過對這些數據進行註釋,但是由於這兩個字段是[未映射],所以我仍然有相同的問題。 – EZE

+0

對不起,我忘記了您無法更改數據庫。 'Computed'告訴EF這些值是由數據庫生成的,它不應該觸及它們。如果您不能在數據庫上覆制T1的硬編碼邏輯:FK1 FK2,則此方法無法工作。 –