2015-11-16 21 views
6

Birincil Anahtar Kimliği olan bir tablonuz var, bu alan bir kimlik sütunu değil. Varlık Çerçevesi 6 için taşıma işlemim, tamamen bana doğru oldukça açık görünüyor.Varlık Framework Non Identity - NULL değeri 'ID' sütununa eklenemiyor

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" 
      });     
    } 
} 

Ben

"sütununda 'ID' NULL değeri eklenemiyor, tablo 'dbo.Action' bir hatayı olsun bu noktada var: Sonra bazı verileri tohum bir yöntem var ; sütun boş değerlere izin vermez INSERT başarısız \ r \ nBu deyimi açıkça kimlik sütunu için değer sağlayarak am görebileceğiniz gibi

"sonlandırıldı olmuştur... Benim şüphe Varlık Çerçeve

Entity sınıfı çok basit bir kimlik sütunu olmak kimliğini bekliyor olmasıdır

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

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

Eğer 'Action' varlık için eşleme gönderebilir miyim kullanarak düzeltebilirsiniz? –

+0

EF'ye ID sütununun bir kimlik sütunu olmadığını söylediniz mi? – DavidG

+0

Kimlik olarak söylediğimde kesinlikle göç yaptığım şey budur: false – keitn

cevap

6
Sizin göç sadece veritabanında tablo oluşturur ancak Varlık Framework söylemez

ID özelliği bir IDENTITY sütun değil. EF birincil anahtar olarak kullanmak hangi özelliği onu söylemezsem, kimlik denilen özellik alır, ancak, DatabaseGenerated özelliğini kullanarak bunu yapmak da bir KİMLİK sütun değil EF anlatmak gerekir:

[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

hata alan adının birincil anahtar ve kimlik olması gerektiğinden kaynaklanır.
EF oluştur create insert deyimi bu alan için değer oluşturmaz.

Sen

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

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