Исключение при оценке EntityState объекта List в Entity Framework Core - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю небольшое приложение для ведения журнала. В нескольких сценариях ios я сохраняю один объект TransactionHistory, оценивая EntityState. Когда новый объект добавляется в DomainObject (TransactionHistory), состояние объекта изменяется на добавленное, и SaveChanges() работает нормально.

public void LogTransactionHistory()
{
     var transactionsHistory = new TransactionsHistory();

     transactionsHistory.TransactionId = 1123;
     transactionsHistory.Status = 2;
     transactionsHistory.Comments = "Single Entity";

     context.TransactionsHistory.Add(transactionsHistory);

     if (context.Entry(transactionsHistory).State == EntityState.Added)
     {
         context.SaveChanges();
     }
}

И при сохранении списка TransactionHistory объектов и оценивая EntityState, я получаю следующее исключение:

Тип объекта «Список» не найден. Убедитесь, что тип сущности был добавлен в модель

Это мой код:

public void LogHistoryList()
{
    var transactionHistoryList = new List<TransactionsHistory>();

    transactionHistoryList.Add(new TransactionsHistory()
            {
                TransactionId  = 50331,
                Status = 2,
                Comments = "Multiple entities",
            });

    context.TransactionsHistory.AddRange(transactionHistoryList );

    var addedEntities = context.ChangeTracker.Entries()
                .Where(x => x.State == EntityState.Added);

    // checking the entity state of transactionHistoryList
    if (context.Entry(transactionHistoryList).State == EntityState.Added) // exception
    {
        context.SaveChanges();
    }
}

Модель:

public partial class TransactionsHistory
{
    public long TransactionId { get; set; }
    public short? Status { get; set; }
    public string Comments {get ;set;}
}

Может кто-нибудь помочь мне с Эта проблема? Я что-то пропустил?

Заранее спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

В этом сценарии вы получаете все added сущности из ChangeTracker в addedEntities и вам не нужно проверять снова в if (context.Entry(transactionHistoryList).State == EntityState.Added).

context.Entry принять одну entity, но вы передать диапазон от entities до context.Entry

Вы должны перейти на это

context.TransactionsHistory.AddRange(transactionHistoryList);

var addedEntities = context.ChangeTracker.Entries()
                    .Any(x => x.State == EntityState.Added);

if (addedEntities)
{
    context.SaveChanges();
}

Обновить

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

foreach(var entity in ChangeTracker.Entries())
{
    if(entity.State = EntityState.Added)
    {
        //DoSomething
    }
}
...