Microsoft.EntityFrameworkCore.DbContext
(对于版本1.1.0)有两个版本的AddRange(以及其他类似的方法):
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 :(得分:0)
您可以将列表本身转换为IEnumerable<object>
:
context.AddRange(list.Cast<object>());