gpt4 book ai didi

c# - Entity Framework : How to enable cascade delete on one way related entities

转载 作者:太空狗 更新时间:2023-10-29 21:39:50 27 4
gpt4 key购买 nike

有两个实体,如下所示:

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, ...
}

业务删除文件如何配置级联删除?请注意,我不需要从 FileBusiness 的任何导航。

更新:

您可能会发现 modelBuilder 配置如下:

        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();

这是我遇到的错误:

Introducing FOREIGN KEY constraint 'FK_dbo.Files_dbo.Businesses_Business_Id1' on table 'Files' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint

最佳答案

如果你喜欢使用单独的配置类,你可以尝试这样的事情:

  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();
}
}

当您不在 .WithOptional().WithRequired() 中传递 lambda 时,意味着另一侧没有导航属性。

关于c# - Entity Framework : How to enable cascade delete on one way related entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18506472/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com