EF Core-列不允许为空。插入失败

时间:2019-02-02 14:17:35

标签: c# entity-framework ef-core-2.1

  

无法将值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;
}

2 个答案:

答案 0 :(得分:1)

事实证明,我运行的迁移无法正常运行。未将DefaultValue约束应用于数据库上的列。

谢谢大家。

解决方案:

  • 检查表的结构,并确保流利的配置和数据库同步。

答案 1 :(得分:0)

数据类型必须为空,您可以像下面这样使它为空

公共诠释? AttributeId {get;组; }