首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlQuery EntityKey并返回相应的对象

SqlQuery EntityKey并返回相应的对象
EN

Stack Overflow用户
提问于 2013-12-19 11:11:01
回答 2查看 336关注 0票数 1

我想基于一个EntityKey查询我的数据库,是否有一种内置(或更简单的方法)来做到这一点?

我现在的做法是这样的:

代码语言:javascript
复制
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做到这一点呢?(我更喜欢这样,因为我不需要手动翻译)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-02 13:34:43

如果您知道要检索的实体的类型,可以使用DbContext上的DbContext方法获取DbSet,在DbSet上使用Find方法通过其键获取实体。

代码语言:javascript
复制
var dbSet = dbContext.Set<TestTable>();
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value);

Find方法知道如何使用键值来获取实体;实际上,签名是Find(params object[]),因此如果表中有一个复合键(只要它们的顺序正确),您就可以传递多个键值。

票数 1
EN

Stack Overflow用户

发布于 2014-01-01 14:56:51

您可以将您的DbContext转换为IObjectContextAdapter接口,然后您可以访问具有 method的底层ObjectContext对象。

代码语言:javascript
复制
using (var context = new DbContext())
{
    var objectContext = ((IObjectContextAdapter)context).ObjectContext;
    var entity = objectContext.GetObjectByKey(yourEntityKey);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20680169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档