2015-11-16 19 views
6

IDの主キーを持つテーブルがあります。このフィールドはID列ではありません。 Entity Framework 6のマイグレーションはEntity Framework非同一性 - 列 'ID'にNULL値を挿入できません

CreateTable(
    "dbo.Action", 
    c => new 
    { 
     ID = c.Int(nullable: false, identity: false), 
     ActionName = c.String(maxLength: 50), 
    }) 
    .PrimaryKey(t => t.ID); 

です。これはすべて私にとってはまっすぐに見えます。

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

それは私がエラー

「の列にNULL値を挿入することはできません 『ID』、テーブル 『dbo.Action』を取得し、この時点でです。そして、私はいくつかのデータをシードする方法を持っています; 列はNULLを許可しないINSERTが失敗した\私ははっきりとID列の値を提供しています見ることができるように、Rの\ nこのステートメントは は「

を終了しました。。。私の疑惑は、Entity FrameworkはIDがID列

ことを期待しているエンティティ・クラスが

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

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

を使用して、それを修正することができますか? –

+0

ID列がID列ではないことをEFに伝えましたか? – DavidG

+0

アイデンティティを言うとき、マイグレーションで私がやっていることは間違いありません:偽 – keitn

答えて

6

あなたの移行は唯一のデータベースにテーブルを作成しますが、Entity Frameworkのに教えてくれない非常にシンプルであるということですIDプロパティがIDENTITY列ではありません。あなたは主キーとして使用するプロパティにそれを教えていない場合はEFは、IDと呼ばれるプロパティを選び、あなたもDatabaseGenerated属性を使用してこれを行う、それはIDENTITY列ではありませんEFを伝える必要があります:

[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

エラーはフィールド名Idがプライマリキーとアイデンティティであると考えられるためです。
EF生成のinsert文では、そのフィールドに値が生成されません。

あなたは `Action`エンティティのマッピングを投稿することができます

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

    [DataMember] 
    public string ActionName { get; set; } 
} 
関連する問題