2013-02-15 99 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