2013-02-15 15 views
8

Wir arbeiten in Entity Framework-Code zuerstEF-Code erste Kaskade löschen auf Fremdschlüssel one-to-many

Wir haben eine Klasse Video

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

unser Bild infoclass einen Pfad zu dem Bild enthält und einige andere Informationen

class ImageInfo{ 
    String path; 
    ... 
} 

würden wir EF entfernen haben, um die imageinfos mögen, wenn das Video

entfernen

so haben wir den Modellbauer wie folgt:

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

wir nicht wollen, einen Link zurück zu Video in unserer Klasse image hinzuzufügen.

ist es möglich, Kaskadenlöschfunktion ohne einen 2-Wege-Fremdschlüssel zu erhalten?

EDIT

die video_id der Imageinfo erhalten in der Datenbank nicht ausgefüllt, wenn ein Video zu speichern.

http://pbrd.co/14X82vb

wie können wir dieses Problem beheben?

Ich weiß nicht, ob die damit verbundene, aber wenn wir ein neues Video mit Bildern zur gleichen Zeit hinzufügen, bekommen wir diese Fehler:

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

Antwort

14

Die WithRequired stellt die 2-Wege-Beziehung. Also sollten Sie Folgendes tun.

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

... und vorausgesetzt, Sie die Beziehung in die andere Richtung wollen um ...

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

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

PS: Ich denke, die List<ImageInfo>virtual sein sollte, hier so ist, wie ich es definieren würde. ..

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

Funktioniert wie ein Charme. Wir hatten auch ein zweites Problem. Wir haben der Images-Eigenschaft eine neue Liste zugewiesen, wodurch die Datenbanksynchronisierung fehlschlägt. Also haben wir gelernt, niemals einer Immobilie eine neue Liste zuzuordnen. (ähnlich mit ObservableCollection und Databinding) –

+0

Akzeptanz der Antwort würde sehr geschätzt werden dann :-). Außerdem hilft es Ihrem eigenen Ruf, zu mehr/besseren Antworten zu führen. – AxelEckenberger

+0

wir haben immer noch das Problem, die Bilder beim Löschen eines Videos zu kaskadieren: siehe Originalfrage (bearbeitetes Teil) –

Verwandte Themen