Model view controller 当删除实体值未引用其他实体时检查引用

Model view controller 当删除实体值未引用其他实体时检查引用,model-view-controller,entity-framework-6,Model View Controller,Entity Framework 6,我必须删除国家表的一条记录,在此之前我需要检查 该Id是否引用了其他表。如果该ID不存在于任何引用表中,那么我将删除该记录 如何通过实体框架来检查这种情况? < P>首先,你必须首先考虑任何代码,首先是数据库,还是首先使用EDMX来构建你的数据访问层。 默认情况下,如果其他某个表中存在相关行,则数据库将阻止您删除country表中的行 如果使用更新数据库,然后从数据库更新现有模型,则实体框架将向添加级联删除规则,但不会。您必须手动添加它。例如,要从Person中删除一行,请参见下图 在服务器资

我必须删除国家表的一条记录,在此之前我需要检查 该Id是否引用了其他表。如果该ID不存在于任何引用表中,那么我将删除该记录


如何通过实体框架来检查这种情况?

< P>首先,你必须首先考虑任何代码,首先是数据库,还是首先使用EDMX来构建你的数据访问层。 默认情况下,如果其他某个表中存在相关行,则数据库将阻止您删除country表中的行

如果使用更新数据库,然后从数据库更新现有模型,则实体框架将向添加级联删除规则,但不会。您必须手动添加它。例如,要从Person中删除一行,请参见下图

在服务器资源管理器中,打开数据库关系图。右键单击Person和StudentGrade之间的关系表格之间的线,然后选择Properties

要在概念模型中指定级联删除规则,请在实体设计器图面上选择关联。然后,在属性窗口中,为OnDelete属性选择Cascade

参考:

参考:

另外,对于代码优先的方法,在数据库上下文中,您可以指定一个规则,以便在删除时级联,如下所示

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //...
    modelBuilder.Entity<Country>().HasMany(e => e.PersonCountry).WithOptional(s => s.Country).WillCascadeOnDelete(true);
    //...
}
参考:

参考: