【发布时间】:2014-01-28 04:06:03
【问题描述】:
为了将这个问题简化为一个简单的版本,我创建了这个表:
create table TestTable(id int primary key, descr varchar(50))
请注意,id 字段不是身份字段。现在,如果我尝试使用 EF Code First 插入一行:
[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。欢迎任何线索或提示。
【问题讨论】:
-
您是否尝试删除
[Key]属性? -
@hunter:是的,我有,导致同样的错误。我怀疑 EF 隐式假设以
Id结尾的列是键。 -
尝试使用这个 DataAnotations 选项
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)] -
@Guillelon:很好,看起来很有效!将测试更多。你忘了
.Schema.顺便说一句,全名是System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None -
@Andomar 是的,对不起,我正要编辑它并像这样
[DatabaseGenerated(DatabaseGeneratedOption.None)];) 希望它有效!
标签: c# sql-server entity-framework ef-code-first