2015-11-16 2 views
6

Ich habe eine Tabelle mit einem Primärschlüssel der ID, dieses Feld ist keine Identitätsspalte. Meine Migration für Entity Framework 6 istEntity Framework Non Identity - Kann den Wert NULL nicht in Spalte 'ID' einfügen

Das alles sieht ziemlich direkt zu mir. Dann habe ich eine Methode einige Daten auf Saatgut:

public static void Seed(this DbSet<Action> entitySet) 
{ 
    MainContext dbCtx = DataRepositoryBase<Action>.GetContext(entitySet) as MainContext; 
    if (dbCtx != null) 
    { 
      entitySet.Add(new Action() 
      { 
       ID = 1, 
       ActionName = "Test" 
      });     
    } 
} 

Es ist an der dieser Stelle Ich erhalte einen Fehler

„Kann nicht den Wert NULL in Spalte‚ID‘einfügen, Tabelle‚dbo.Action‘ ; Spalte lässt Nullwert nicht INSERT fehlschlägt \ r \ nDie Anweisung „

Wie man sehen kann ich einen Wert deutlich am Bereitstellung für die ID-Spalte beendet worden ist... Mein Verdacht ist, dass Entity Framework ist die ID erwartet eine Identitätsspalte

Das Entity-Klasse ist sehr einfach zu sein

[DataContract] 
public class Action 
{ 
    [DataMember] 
    public int ID { get; set; } 

    [DataMember] 
    public string ActionName { get; set; } 
} 
+0

verwenden, können Sie die Zuordnung für die 'Action' Entität posten? –

+0

Haben Sie EF mitgeteilt, dass die ID-Spalte keine Identitätsspalte ist? – DavidG

+0

Sicher mache ich das bei der Migration, wenn ich Identität sage: false – keitn

Antwort

6

Ihre Migration nur die Tabelle in der Datenbank erstellt, aber nicht sagen Entity Framework die die ID-Eigenschaft ist keine IDENTITY Spalte. EF nimmt die Eigenschaft namens ID, wenn Sie es nicht sagen, welche Eigenschaft als Primärschlüssel zu verwenden, aber Sie müssen auch EF sagen, dass es nicht eine Identity-Spalte ist, tun dies die DatabaseGenerated Attribut:

[DataContract] 
public class Action 
{ 
    [DataMember] 
    [Key] //This isn't technically needed, but I prefer to be explicit. 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int ID { get; set; } 

    [DataMember] 
    public string ActionName { get; set; } 
} 
2

Die Der Fehler ist darauf zurückzuführen, dass die Feldnamen-ID für den Primärschlüssel und die Identität steht.
Wenn EF-Anweisung erzeugen Einfügeanweisung generiert keinen Wert für dieses Feld.

Sie können das Problem beheben

[DataContract] 
public class Action 
{ 
    [DataMember] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int ID { get; set; } 

    [DataMember] 
    public string ActionName { get; set; } 
} 
Verwandte Themen