2016-09-16 55 views
0

關係我繼承了一個項目,所有的一個以這種方式一個一對多的實體框架沒有FK

[Table("A")] 
public partial class A 
{ 
    public int Id { get; set; } 
    public int Something {get; set; } 

    public virtual ICollection<B> B { get; set; } 

} 

[Table("B")] 
public partial class B 
{ 
    [Key] 
    public int Id { get; set; } 
    public int Something {get; set; } 

    [Required] 
    public virtual A A { get; set; }  
} 

讓我大吃一驚的是缺乏在一個INT外鍵財產創造了很多關係B型號。 實體框架必須創建它,因爲它們存在於我們的數據庫中。

任何人都可以解釋第一個爲什麼發生這種情況,兩個,如果這可能導致延遲加載問題?

回答

0

EntityFramework在默認情況下會查找名稱「id」並將其作爲關鍵字。你可以指定裝飾使其更快,因爲它不必猜測表的關鍵。

我不相信它會影響延遲加載,因爲延遲加載是通過創建派生代理類型的實例,然後重寫虛擬財產增加裝載鉤

來源實現:
Microsoft Key
Microsoft Lazy Loading

+0

是的,但這就是桌子上的Primery Keys,我指的是FK,我應該在表B中公開一個AId屬性。 – Andy

0

EF不需要外鍵屬性。 EF可以建立基於對象關係的隱藏域(我通常使用這種配置,因爲我認爲更多的是POCO)。唯一的問題是,在某些情況下,驗證或SaveChanges中引發的異常更隱蔽,否則一切正常。

關於外鍵列名稱,您可以使用流暢的api(Map + MapLeftKey,MapRightKey和MapKey方法)配置它們。