2016-10-05 3 views
0

Посмотрел высоко и низко, но не смог найти синтаксис для подсчета количества строк в [DbContext]. [DbSet Entity] по состоянию изменения строки. В частности, я хотел бы знать, сколько строк в одной сущности/таблице было добавлено и находятся в ожидании SaveChanges().Как подсчитать строки DbSet, добавленные в DbContext

ответ

1

Вы можете использовать один из методов DbContext.ChangeTracker.Entries перегрузках (подобных EF6):

var addedCount = db.ChangeTracker.Entries<YourEntity>() 
    .Count(e => e.State == EntityState.Added); 
+0

Спасибо, что работали. У меня возникли проблемы с поиском исчерпывающей документации для EF Core, и есть предупреждения о том, что у нее важные отличия от EF6, поэтому я не решаюсь ссылаться на документацию EF6. – KarlRKaiser

+0

Да, нет никакой документации по классам, поэтому все, что у нас есть, это Intellisense :(И вот одно из немногих мест, где я мог бы включить документацию lnk в EF6, поскольку (по крайней мере в настоящее время) эта конкретная часть такая же. –

1

(Первый ответ, так нежна) У меня была аналогичная проблема. Один из подходов заключается в переопределении контексте SaveChanges метод, предложенный здесь: https://www.exceptionnotfound.net/entity-change-tracking-using-dbcontext-in-entity-framework-6/

Но в вашей ситуации специальный метод в вашем классе контекста может быть более подходящим:

public virtual Tuple<int, int> CountChanges() 
{ 
    var modified = ChangeTracker.Entries().Where(x => x.State == EntityState.Modified).Count(); 
    var added = ChangeTracker.Entries().Where(x => x.State == EntityState.Added).Count(); 
    return new Tuple<int, int>(modified, added); 
} 
Смежные вопросы