2017-02-02 4 views
0

Microsoft.EntityFrameworkCore.DbContext (для версии 1.1.0) имеет две версии AddRange (и другие подобные методы):EF Core: AddRange (список) работает неправильный OverLoad

public virtual void AddRange([NotNullAttribute] IEnumerable<object> entities); 
public virtual void AddRange([NotNullAttribute] params object[] entities); 

Второй раз casts к IEnumerable<object>.

Когда я пишу:

IReadOnlyCollection<Entity> list = ... 
context.AddRange(list); 

вторых пробеги перегрузки, и бросает массив object в IEnumarable<object>, где один элемент является IReadOnlyCollection<Entity>. Затем он переходит к StateManager. GetOrCreateEntry, где он рассматривался как сущность. Я не уверен, что это не работает, только что мои тесты не удались из-за этой части:

dbMock.Setup(x => x.AddRange(It.IsAny<object[]>())) 
       .Callback<object[]>(xs => 
       { 
        foreach (var entity in xs) // entity is IReadOnlyCollection<Entity> here 

Что я делаю неправильно?

+0

Когда я пишу один и тот же, мой компилятор (VS2015) выбирает первый (правильный) перегрузки. –

+0

Я получил тот же результат, что и @IvanStoev при тестировании перегрузок в среде, отличной от ef. – Smit

ответ

0

Вы можете бросить сам список к IEnumerable<object>:

context.AddRange(list.Cast<object>()); 
Смежные вопросы