2015-04-20 7 views
10

Ich erstellte ein Modell mit 3 Klassen mithilfe von Tabelle-pro-Hierarchie-Vererbung und mit 2 Fremdschlüssel, die sich selbst auf die Hierarchietabelle verweisen.Migrationsergebnisse in "Sequenz enthält keine Elemente" Fehler

Ich habe eine BaseProperty Klasse mit einem selbst Clone Schlüssel CloneID und Navigationseigenschaft Referenzierung:

public class BaseProperty 
{ 
    public int ID {get; set; } 

    public int? CloneID {get; set; } 

    public BaseProperty Clone {get; set; } 

    //If I add this code, when I use Add-Migration - 
    //Sequence contains no elements error 
    //public int? TriggeredCloneID {get; set;} 
} 

Ich habe eine Klasse, die PropertyBaseProperty und hat einen Fremdschlüssel BlockID und eine Block Navigationseigenschaft erbt.

public class Property : BaseProperty 
{ 
    public int? BlockID { get; set; } 

    public Block { get; set; } 
} 

Ich habe eine Block Klasse, die BaseProperty und hat eine Properties Navigationseigenschaft erbt:

public class Block: BaseProperty 
{ 
    public ICollection<Property> Properties { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
    public int? ComputedNumberOfProperties { get; set; } 
} 

Beachten Sie, dass die Block Eigenschaft in der Property Klasse, weil beide Property und Block vererben BaseProperty auch Referenzierung selbst ist und Ich verwende Tabellen-für-Hierarchie-Vererbung.

Es hat funktioniert und ist in einem Produktionssystem mit Live-Daten. Jetzt möchte ich ein Feld hinzufügen (nur eine Standard-int?-Eigenschaft), um die Basisklasse und ich bekomme eine "Sequenz enthält keine Elemente" Fehler, wenn ich eine Migration hinzufügen.

Ich fand das offene Problem bei https://entityframework.codeplex.com/workitem/569, also Ich habe versucht, die beschriebene Problemumgehung und entfernte die selbstreferentiellen Schlüssel und Navigationseigenschaften, aber diese Migration fehlgeschlagen mit dem gleichen Fehler. Jetzt scheint ich komplett aufgespießt zu sein ...

+1

könnten Sie Code schreiben, dass verursacht diesen Fehler? – mr100

+0

Wenn Sie überhaupt keine Eigenschaften hinzufügen und nur versuchen, eine neue leere Migration zu erstellen, funktioniert das wie erwartet? –

+0

@ChrisCurtis ja Migrationen funktionieren normal für Änderungen in anderen Klassen. Nach vielen Versuchen habe ich es tatsächlich geschafft, es zum Laufen zu bringen. Es gab auch ein Datenbank-berechnetes Feld in der Klasse "Block". Durch das Entfernen dieser Eigenschaften (sowie der Eigenreferenzeigenschaften) kann ich Migrationen ausführen. Ich beabsichtige, ein wenig mit dem Problem zu experimentieren, um Code bereitzustellen, der das Problem nachbildet. Dann werde ich es hier posten – Colin

Antwort

1

Es gab auch ein Datenbank-berechnetes Feld in der Block-Klasse. Durch das Entfernen dieser Eigenschaften (sowie der Eigenschaften, die auf sich selbst verweisen) kann ich eine Migration ausführen.

0

ich auch dieses Problem hatte, habe ich versucht, eine Art ComicImage-ComicMediaFile zu ändern ... ich die Variablennamen nicht vorsichtig war zu ändern, so landete ich mit

List<ComicMediaFile> ComicImages; // and after I changed this variable name to ComicMediaFiles... it worked... I don't know why. 
Verwandte Themen