SqlQuery EntityKey并返回相应的对象

时间:2013-12-19 11:11:02

标签: c# entity-framework entity-framework-5 entitykey

我想基于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做到这一点? (我更喜欢,因为我不需要手动翻译)

2 个答案:

答案 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[]),因此如果您的表具有复合键(只要它们按照正确的顺序排列),您就可以传入多个键值。