实体框架级联首先删除0..1到0..1代码

时间:2014-06-19 15:20:09

标签: c# entity-framework ef-code-first

我的模型中有以下三个poco类

public class Item 
{
    public Guid Id { get; set; }
    public virtual DbImage Image { get; set; }
    //other properties
}

public class Creature
{
    public Guid Id { get; set; }
    public virtual DbImage Image { get; set; }
    //other properties
}

public class DbImage 
{
    public Guid Id { get; set; }
    private byte[] ImageBytes { get; set; }
}

有没有办法以删除项目或生物会自动删除相应图像的方式配置流畅的API?每张图片都属于一个项目或一个生物。

我尝试了以下流畅的API配置:

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Item>().HasOptional<DbImage>(i => i.Image).WithOptionalDependent().WillCascadeOnDelete();
    }
}

这会导致以下迁移:

AddForeignKey("dbo.Items", "Image_Id", "dbo.DbImages", "Id", cascadeDelete: true);

现在的结果是,删除图像会导致删除相应的项目或生物,而不是相反。我已经尝试了很多其他的东西,但我无法以正确的方式来实现这一目标。有人可以告诉我这是否甚至可能吗?

1 个答案:

答案 0 :(得分:0)

要实现此目的,您应该在DbImage站点上定义所需的关系:

modelBuilder.Entity<Item>().HasOptional<DbImage>(i => i.Image).WithRequired().WillCascadeOnDelete();

由于这个没有额外的Image_Id属性将添加到Item,而是rleationship将基于Item和DbImage中的主键。