2013-02-15 97 views
8

我们在实体框架代码第一个工作日EF代码第一级联删除外键的一到多

我们拥有一流的视频

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

我们的形象infoclass包含对图像的路径和其他一些信息

class ImageInfo{ 
    String path; 
    ... 
} 

我们希望有去除视频

当EF删除imageinfos 10

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

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

我们不希望在我们的imageinfo类中添加一个链接回视频。

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

编辑

的的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. 

回答

14

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<ImageInfo>应该是virtual,所以这里是如何我定义它。 ..

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

工程就像一个魅力。我们还有第二个问题。我们为Images属性分配了一个新列表,导致数据库同步失败。所以我们学会了永远不要为物业分配新的清单。 (类似于observableCollection和databinding) – 2013-02-15 18:55:23

+0

接受答案将不胜感激,然后:-)。另外它还可以帮助你自己的声誉,导致更多/更好的答案。 – AxelEckenberger 2013-02-15 19:19:30

+0

我们仍然存在级联删除视频图像的问题:请参阅原始问题(已编辑部分) – 2013-02-15 20:47:45