我想基于EntityKey查询我的数据库是否有内置(或更简单的方法)来执行此操作?
我目前的做法是这样的:
using (var context = new DbContext())
{
context.DataBase.SqlQuery<TestTable>("select * from @p0 where @p1 = @p2", EntityKey.EntitySetName, EntityKey.EntityKeyValues[0].Name, EntityKey.EntityKeyValues[0].Value);
}
(此解决方案目前存在问题,即EntitySetName不是TableName,我需要从MetaData中获取TableName,与Id的名称相同,也可能与数据库不同)
或者甚至有办法用LINQ做到这一点? (我更喜欢,因为我不需要手动翻译)
答案 0 :(得分:2)
您可以将DbContext
转换为IObjectContextAdapter
界面,然后您可以访问具有GetObjectByKey
method的基础ObjectContext
对象:
using (var context = new DbContext())
{
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var entity = objectContext.GetObjectByKey(yourEntityKey);
}
答案 1 :(得分:1)
如果您知道要检索的实体的类型,可以使用DbContext上的Set
方法获取DbSet
,并Find
方法DbSet
1}}通过其密钥获取实体。
var dbSet = dbContext.Set<TestTable>();
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value);
Find
方法知道如何使用键值来获取实体;实际上,签名为Find(params object[])
,因此如果您的表具有复合键(只要它们按照正确的顺序排列),您就可以传入多个键值。