Entity Framework 非同一性 - 无法将 NULL 值插入列 'ID'
Entity Framework Non Identity - Cannot insert the value NULL into column 'ID'
我有一个table,主键是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);
在我看来,这一切都相当简单。然后我有一个方法来播种一些数据:
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"
});
}
}
就在此时我收到一个错误
"Cannot insert the value NULL into column 'ID', table 'dbo.Action';
column does not allow nulls. INSERT fails.\r\nThe statement has been
terminated"
如您所见,我清楚地为 ID 列提供了一个值。我怀疑 Entity Framework 期望 ID 是身份列
实体class非常简单
[DataContract]
public class Action
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}
您的迁移仅在数据库中创建 table,但不会告诉 Entity Framework 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; }
}
错误是因为字段名称 Id 应该是主键和身份。
当 EF 生成插入语句时不为该字段生成值。
您可以使用
修复它
[DataContract]
public class Action
{
[DataMember]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}
我有一个table,主键是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);
在我看来,这一切都相当简单。然后我有一个方法来播种一些数据:
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"
});
}
}
就在此时我收到一个错误
"Cannot insert the value NULL into column 'ID', table 'dbo.Action'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated"
如您所见,我清楚地为 ID 列提供了一个值。我怀疑 Entity Framework 期望 ID 是身份列
实体class非常简单
[DataContract]
public class Action
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}
您的迁移仅在数据库中创建 table,但不会告诉 Entity Framework 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; }
}
错误是因为字段名称 Id 应该是主键和身份。
当 EF 生成插入语句时不为该字段生成值。
您可以使用
修复它[DataContract]
public class Action
{
[DataMember]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
[DataMember]
public string ActionName { get; set; }
}