2012-01-25 168 views
2

IM定義在模型級的東西外鍵關係是這樣的:定義EF模型MVC3外鍵關係

public class CMShoppingEntities : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Entity<Category>() 
       .HasOptional(c => c.parentCategory) 
       .WithMany(c => c.ChildCategories) 
       .HasForeignKey(p => p.ParentID); 

      base.OnModelCreating(modelBuilder); 
    } 
} 

那麼爲什麼我們需要或者是需要定義在數據庫/表級別外鍵關係.. ?

+1

不,它不是必需的,但它會幫助您保持數據的完整性。 –

+0

感謝stian您的寶貴意見...但我想問一個更多的問題,它會把額外的負載數據庫服務器或需要更多的空間來維持關係? –

+0

問題有點模糊。你問你爲什麼需要數據庫中的外鍵?或爲什麼使用EF模式外鍵? – Eranga

回答

0

該映射表示FK關係存在於數據庫中= EF認爲您的數據庫使用了參照完整性。如果你的數據庫沒有使用它,映射和你的應用程序仍然可以工作,直到有人將數據存儲在你的數據庫中,這將違反這個預期的約束條件。然後,由於數據不一致,您的應用程序將隨機停止工作。

所以,如果你想在你的模型中使用FK關係,也可以在數據庫中使用它。如果你希望級聯刪除工作

  • 這個問題有幾個問題。您必須在數據庫中使用引用約束並將其配置爲級聯刪除以及

  • 只有在使用代碼映射時,數據庫中的指定關係才能輕鬆工作。在EDMX的情況下,您必須手動維護SSDL描述,以便EF仍然認爲存在關係