Ответ 1
Я столкнулся с этой проблемой один раз и разрешил ее, проверив поля, которые были отправлены в базу данных. Оказывается, я непреднамеренно пытался вставить нулевое значение в столбец, который был спроектирован как не нуль.
Я использую Entity Framework для создания веб-приложения, база данных создается при запуске, а мой метод seed добавляет некоторые объекты в базу данных без каких-либо проблем. Также извлечение объектов работает без проблем.
Моя проблема в том, что если я попытаюсь создать сущность из моего слоя пользовательского интерфейса, я сталкиваюсь с ошибкой OriginalValues cannot be used for entities in the Added state
. Исключение не выбрасывается в пользовательский интерфейс, но я нашел его, когда я окунулся в проблему.
В моем случае:
public virtual TEntity Add(TEntity entity)
{
var entry = _context.Entry(entity);
entry.State = EntityState.Added;
_dbSet.Add(entity);
return entity;
}
Скриншот:
Сущность очень мала и отображения:
public abstract class EntityBase
{
public int Id { get; set; }
}
public class AccessCode : EntityBase
{
public string Code { get; set; }
public int UsageCount { get; set; }
}
public class AccessCodeMapping : EntityTypeConfiguration<AccessCode>
{
public AccessCodeMapping()
{
// Table
ToTable("AccessCode");
// Primary key
HasKey(x => x.Id);
// Properties
Property(accesscode => accesscode.Code).IsRequired().HasMaxLength(256);
Property(accesscode => accesscode.UsageCount).IsRequired();
}
}
И вот как я создаю тестовый код доступа для демонстрационной цели
var ac = new AccessCode {Code = "321", UsageCount = 0};
_accessCodeService.Create(ac);
_unitOfWork.Save();
return View("Login");
Может ли кто-нибудь понять, почему эта ошибка происходит? Я потерялся.: -)
P.s Сообщите мне, есть ли некоторые фрагменты кода, которые вы хотите видеть.
Я столкнулся с этой проблемой один раз и разрешил ее, проверив поля, которые были отправлены в базу данных. Оказывается, я непреднамеренно пытался вставить нулевое значение в столбец, который был спроектирован как не нуль.
В рамках исключения найдите:
$exception.EntityValidationErrors[n].ValidationErrors[n].ErrorMessage
$exception.EntityValidationErrors[n].ValidationErrors[n].PropertyName
Где [n] - индекс массива (может быть больше одного).
Я столкнулся с этой проблемой, и причина в том, что я пытался подстроить строку длиной 10 в столбец Varchar, который был изменен в DB до 25, но все еще находился в Framework как 6. Я удалил свойство и обновил от db и проблема исчезла.
Проверьте, нет ли у вашей модели устаревших столбцов с нулевым ограничением и которые имеют нуль в базе данных, обновление модели решает эту проблему.
Проверьте, является ли вы SubmitChanges() с столбцом не null, когда значение равно null.