kei*_*itn 6 c# sql-server identity entity-framework primary-key
我有一个主ID为ID的表,该字段不是标识列.我对Entity Framework 6的迁移是
CreateTable(
"dbo.Action",
c => new
{
ID = c.Int(nullable: false, identity: false),
ActionName = c.String(maxLength: 50),
})
.PrimaryKey(t => t.ID);
Run Code Online (Sandbox Code Playgroud)
这一切看起来都很直接.然后我有一个方法来播种一些数据:
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"
});
}
}
Run Code Online (Sandbox Code Playgroud)
就在这时我得到了一个错误
"不能将NULL值插入列'ID’,表'dbo.Action’;列不允许空INSERT失败\ r \n该语句已终止."
如您所见,我显然为ID列提供了一个值.我怀疑实体框架期望ID是一个Identity列
Entity类非常简单
[DataContract]
public class Action
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您的迁移仅在数据库中创建表,但不会告知实体框架ID属性不是IDENTITY列.如果您没有告诉它使用哪个属性作为主键,EF会选择名为ID的属性,但您还需要告诉EF它不是IDENTITY列,使用以下DatabaseGenerated属性执行此操作:
[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; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2298 次 |
| 最近记录: |