使用EF6我可以使用Find(key1.a, key1.b)
方法通过复合主键获取实体。
是否可以对多个键执行相同操作,即
var keys = new [] {new {a = 1, b = 2}, new {a = 2, b = 3}, /*etc*/};
var entities = context.Items.Find(key1.a, key1.b, key2.a, key2.b, ..., keyN.a, keyN.b);
UPD :
此外,我想知道为什么EF有两种按密钥搜索的方法:Find
和LINQ的Where
,Single
等。
答案 0 :(得分:1)
documentation在这里很清楚:这是不可能的
最好的做法是使用LINQ' Where
:
context.Items.Where(x => keys.Any(y => y.a == x.a && y.b == x.b))
答案 1 :(得分:1)
如果你可以为一个人做任何事情,你可以通过重复多次这样做来为许多人做。
您可以为此
编写扩展方法public static class IDbSetExtensions
{
public static ICollection<T> FindMany( this IDbSet<T> @this, IEnumerable<object[]> keys )
{
return keys.Select( key => @this.Find( key ) ).ToList();
}
}