19

このコードを使用しようとすると:

var model = new MasterEntities();

var customer = new Customers();
customer.Sessionid = 25641;

model.Customers.Add(customer);
model.SaveChanges();

私は得る:

{"列 'Sessionid'、テーブル 'master.dbo.Column' に値 NULL を挿入できません。列は NULL を許可しません。INSERT は失敗します。\r\nステートメントは終了しました。"}

列「Sessionid」は実際には主キーであり、次のように [KEY] でマークされています。

 public class Customers
    {   
        [Key]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }

したがって、この質問によると、プロパティが でマークされている場合[KEY]、データベースが値を割り当てることを期待しているため、EF は自分の Sessionid 宣言を無視するようです。

では、どうすればこれを解決できますか?削除する[KEY]と、"entity type has no key defined"例外が発生します...

4

3 に答える 3

38

次のように追加して解決しました[DatabaseGenerated(DatabaseGeneratedOption.None)]

public class Customers
    {   
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Sessionid { get; set; }
        public long? Pers { get; set; }
    }
于 2013-11-01T13:28:22.187 に答える
2

挿入時にテーブルの主キーを自動生成 (および自動インクリメント) するように SQL を構成できます。次に、C# で [キー] を削除するだけで、アプリケーションで ID を手動で設定する必要はありません。データベースが ID を生成します。

于 2013-11-01T13:08:31.220 に答える