EF Core - столбец не допускает нулевые значения.Вставить не удается - PullRequest
0 голосов
/ 02 февраля 2019

Невозможно вставить значение 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 Context.Но он жалуется, что AttributeId не может быть нулевым, что имеет смысл.Но тип данных свойства - Int.Я не слишком уверен, почему EF Core интерпретирует значение как ноль.Я дошел до жесткого кодирования нуля, но он все еще жалуется.

Кто-нибудь сталкивался с подобной проблемой?Ошибка генерируется в 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 голосов
/ 04 февраля 2019

Оказывается, что выполненные мной миграции не выполнялись должным образом.Ограничение DefaultValue не было применено к столбцу в базе данных.

Спасибо всем.

Решение:

  • Проверьте структуру вашеготаблицы и убедитесь, что текущие настройки и база данных синхронизированы.
0 голосов
/ 02 февраля 2019

тип данных должен быть обнуляемым, вы можете сделать его обнуляемым, как показано ниже

public int?AttributeId {get;задавать;}

...