【问题标题】:EF Code first cascade delete on foreign key one-to-manyEF Code首先级联删除外键一对多
【发布时间】:2013-02-15 15:39:04
【问题描述】:

我们首先在实体框架代码中工作

我们有一个课堂视频

class Video{
   List<ImageInfo> Images{
      get; set;
   }
}

我们的图像信息类包含图像的路径和一些其他信息

class ImageInfo{
    String path;
    ...
}

我们希望 EF 在删除视频时删除图像信息

所以我们改变了模型构建器如下:

modelBuilder
    .Entity<Video>()
    .HasMany(v => v.Images)
    .WithRequired()
    .WillCascadeOnDelete(true);

我们不想在我们的 imageinfo 类中添加指向视频的链接。

是否可以在没有 2 路外键的情况下获得级联删除功能?

编辑

保存视频时,imageInfo的video_id没有填入数据库。

http://pbrd.co/14X82vb

我们如何解决这个问题?

我不知道它是否相关,但是当我们同时添加一个带有图像的新视频时,我们会得到这个错误:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.

【问题讨论】:

    标签: c# entity-framework sql-server-ce


    【解决方案1】:

    WithRequired 引入了 2 路关系。因此,您应该执行以下操作。

    modelBuilder
        .Entity<Video>()
        .HasMany(v => v.Imgages)
        .WithOptional()
        .WillCascadeOnDelete(true);
    

    ...并假设您希望这种关系反过来...

    public class Video { }
    public class ImageInfo {
        public virtual Video { get; set; }
    }
    
    modelBuilder
        .Entity<ImageInfo>()
        .HasRequired(v => v.Video)
        .WithMany()
        .WillCascadeOnDelete(true);
    

    PS:我认为List&lt;ImageInfo&gt; 应该是virtual,所以这是我的定义...

    public class Video {
        public Video() { this.Images = new List<ImageInfo>(); }
        public virtual ICollection<ImageInfo> Images { get; set; }
    }
    

    【讨论】:

    • 像魅力一样工作。我们还有第二个问题。我们为 Images 属性分配了一个新列表,导致数据库同步失败。因此,我们学会了永远不要为属性分配新列表。 (类似于 observableCollection 和数据绑定)
    • 届时将不胜感激接受答案:-)。此外,它还有助于提高您自己的声誉,从而获得更多/更好的答案。
    • 我们仍然有删除视频时级联图像的问题:请参阅原始问题(已编辑部分)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多