C# 实体框架:如何启用单向相关实体的级联删除
有两个实体,如bellow:C# 实体框架:如何启用单向相关实体的级联删除,c#,entity-framework,code-first,C#,Entity Framework,Code First,有两个实体,如bellow: public class Business { public int Id {get; set;} public File Logo {get; set;} public int? LogoId {get; set;} public File Video {get; set;} public int? Video {get; set;} public ICollection<File> Images
public class Business
{
public int Id {get; set;}
public File Logo {get; set;}
public int? LogoId {get; set;}
public File Video {get; set;}
public int? Video {get; set;}
public ICollection<File> Images {get; set;}
}
public class File
{
// some file props, such as Id, Name, ...
}
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Entity<Entities.Business>()
.HasOptional(b => b.Logo)
.WithOptionalPrincipal()
.WillCascadeOnDelete();
modelBuilder.Entity<Entities.Business>()
.HasOptional(b => b.Video)
.WithOptionalPrincipal()
.WillCascadeOnDelete();
modelBuilder.Entity<Entities.Business>()
.HasMany(b => b.Images)
.WithOptional()
.WillCascadeOnDelete();
这是我的错误:
引入外键约束
表“Files”上的“FK_dbo.Files_dbo.Business_Business_Id1”可能导致
循环或多个级联路径。指定ON DELETE NO ACTION或ON
不更新任何操作,或修改其他外键约束。不能
创建约束
如果您喜欢使用单独的配置类,您可以尝试以下方法:
public class BusinessConfiguration : EntityTypeConfiguration<Business>
{
public BusinessConfiguration()
{
HasMany(x => x.Images).WithOptional().WillCascadeOnDelete();
HasOptional(x => x.Logo).WithOptional().WillCascadeOnDelete();
HasOptional(x => x.Video).WithOptional().WillCascadeOnDelete();
}
}
公共类业务配置:EntityTypeConfiguration
{
公共业务配置()
{
有许多(x=>x.Images).WithOptional().WillCascadeOnDelete();
has可选(x=>x.Logo).WithOptional().WillCascadeOnDelete();
has可选(x=>x.Video).WithOptional().WillCascadeOnDelete();
}
}
当您未在
内传递lambda时。WithOptional()
或。WithRequired()
表示另一端没有导航属性。先编码?先做模特?数据库优先?我正在尝试代码优先。哎呀!出现以下错误:在表“Files”上引入外键约束“FK_dbo.Files_dbo.Business_Business_Id1”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。