无法将值NULL插入表的'AttributeId'列中 'TableName';列不允许为空。 INSERT失败。
我传递给EF Core以便在数据库中插入新记录的对象 看起来像这样
public int Id { get; set; }
public string Value { get; set; }
public int AttributeId { get; set; }
public int CustomAttributeId { get; set; }
我获得了该对象的新实例,并将其传递给我的Db上下文。 但它抱怨AttributeId不能为null,这是有道理的。 但是属性的数据类型是Int。我不太确定为什么EF Core将值解释为null。我曾尝试硬编码零,但它仍然抱怨。
有人遇到过类似的问题吗?错误在UpsertAttribute()中引发
更新
核心层
Db.LineAttribute lineAttribute = new Db.LineAttribute()
{
Value = attribute.Value ?? "",
CustomAttributeId = attribute.Id,
};
if (attribute.Values.Count > 0 && String.IsNullOrEmpty(attribute.Value))
{
if (attribute.Values.Where(x => x.IsDefault == true && x.Id == -1).Count() == 1)
{
// Set default value
lineAttribute.Value = attribute
.Values
.FirstOrDefault(x => x.Id == -1)
.InternalValue;
}
else
{
// Set user selected default value
lineAttribute.Value = attribute
.Values
.FirstOrDefault(x => x.IsDefault = true)
.InternalValue;
}
}
lineAttribute = await _dataLayer.UpsertAttribute(lineAttribute);
数据层
private readonly AppContext _db;
----------------
private async Task<lineAttribute> UpsertAttribute(lineAttribute attr)
{
_db.Entry(attr).State = attr.id <= 0 ? EntityState.Added : EntityState.Modified;
await _db.SaveChanges();
return attr;
}
答案 0 :(得分:1)
事实证明,我运行的迁移无法正常运行。未将DefaultValue约束应用于数据库上的列。
谢谢大家。
解决方案:
答案 1 :(得分:0)
数据类型必须为空,您可以像下面这样使它为空
公共诠释? AttributeId {get;组; }