2012-01-25 112 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仍然认为存在关系