2013-02-15 11 views
8

Pracujemy w pierwszej Entity Code ramowejKod EF pierwszy kaskada usuwać na klucz obcy jeden-do-wielu

Mamy wideo klasy

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

nasz wizerunek infoclass zawiera ścieżkę do obrazu i niektórych innych informacji

class ImageInfo{ 
    String path; 
    ... 
} 

chcielibyśmy mieć EF usunąć imageinfos kiedy usunąć film

więc zmieniliśmy ModelBuilder jak następuje:

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

nie chcemy, aby dodać link do filmu w naszej klasie ImageInfo.

Czy można uzyskać funkcję kasowania kaskadowego bez 2-głosowego klucza obcego?

EDIT

video_id z ImageInfo nie zostanie wypełnione w bazie danych podczas zapisywania wideo.

http://pbrd.co/14X82vb

jak możemy rozwiązać ten problem?

ja nie wiem, czy jej partner, ale gdy dodamy nowy film z obrazów w tym samym czasie, możemy uzyskać ten błąd:

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

Odpowiedz

14

WithRequired wprowadza zależność 2 drożny. Powinieneś wykonać następujące czynności.

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

... i zakładając chcesz relacja na odwrót ...

public class Video { } 
public class ImageInfo { 
    public virtual Video { get; set; } 
} 

modelBuilder 
    .Entity<ImageInfo>() 
    .HasRequired(v => v.Video) 
    .WithMany() 
    .WillCascadeOnDelete(true); 

PS: Myślę, że powinno być virtualList<ImageInfo>, więc o to jak bym go zdefiniować. ..

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

Działa jak urok. Mieliśmy także drugi problem. Przypisaliśmy nową listę do właściwości Obrazy, powodując niepowodzenie synchronizacji bazy danych. Nauczyliśmy się więc nigdy nie przypisywać nowej listy do nieruchomości. (podobne z obserwowalną kolekcją i databinding) –

+0

Akceptacja odpowiedzi byłaby bardzo doceniana wtedy :-). Dodatkowo pomaga także twojej reputacji, prowadząc do lepszych/lepszych odpowiedzi. – AxelEckenberger

+0

nadal mamy problem z kaskadowaniem obrazów podczas usuwania filmu: zobacz oryginalne pytanie (edytowana część) –