10
为了减少这种问题,一个简单的版本,我已经创造了这个表:EF代码第一:添加行表无标识的主键
create table TestTable(id int primary key, descr varchar(50))
注意,id
字段不是身份领域。现在,如果我尝试使用EF代码第一次插入一行:
[Table("TestTable")]
public class TestTable
{
[Key]
public int id { get; set; }
public string descr { get; set; }
}
public class TestContext : DbContext
{
public TestContext(string connectionString) : base(connectionString) {}
public DbSet<TestTable> TestTables { get; set; }
}
static void Main()
{
const string connectionString = "...";
using (var db = new TestContext(connectionString))
{
db.TestTables.Add(new TestTable { id = 42, descr = "hallo" });
db.SaveChanges();
}
}
结果是一个例外:
无法将NULL值插入列“ID”,表“TestTable的”; 列不允许有空值。
但插入该行的代码指定了id = 42
。任何线索或暗示欢迎。
你尝试删除'[关键]'属性? – hunter
@hunter:是的,结果有相同的错误。我假设EF隐含地假设以'Id'结尾的列是关键。 – Andomar
尝试使用此DataAnotations选项'[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]' –