Подтвердить что ты не робот

OriginalValues ​​нельзя использовать для объектов в добавленном состоянии

Я использую 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;
}

Скриншот:

enter image description here

Сущность очень мала и отображения:

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 Сообщите мне, есть ли некоторые фрагменты кода, которые вы хотите видеть.

4b9b3361

Ответ 1

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

Ответ 2

В рамках исключения найдите:

$exception.EntityValidationErrors[n].ValidationErrors[n].ErrorMessage
$exception.EntityValidationErrors[n].ValidationErrors[n].PropertyName

Где [n] - индекс массива (может быть больше одного).

введите описание изображения здесь

Ответ 3

Я столкнулся с этой проблемой, и причина в том, что я пытался подстроить строку длиной 10 в столбец Varchar, который был изменен в DB до 25, но все еще находился в Framework как 6. Я удалил свойство и обновил от db и проблема исчезла.

Ответ 4

Проверьте, нет ли у вашей модели устаревших столбцов с нулевым ограничением и которые имеют нуль в базе данных, обновление модели решает эту проблему.

Проверьте, является ли вы SubmitChanges() с столбцом не null, когда значение равно null.