EF Core:AddRange(列表)运行错误的重载

时间:2017-02-02 17:49:26

标签: c# entity-framework entity-framework-core

Microsoft.EntityFrameworkCore.DbContext(对于版本1.1.0)有两个版本的AddRange(以及其他类似的方法):

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

仅次于castsIEnumerable<object>

当我写:

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

第二次重载运行,并将object数组转换为IEnumarable<object>,其中单项为IReadOnlyCollection<Entity>。然后传递给StateManagerGetOrCreateEntry,将其视为实体本身。我不确定这是不是真的有效,只是发现我的测试因为那件事失败了:

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以将列表本身转换为IEnumerable<object>

context.AddRange(list.Cast<object>());