1

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

4

2 回答 2

2

您可以将您DbContext的接口转换为接口,然后您可以从那里访问具有方法IObjectContextAdapter的底层ObjectContext对象:GetObjectByKey

using (var context = new DbContext())
{
    var objectContext = ((IObjectContextAdapter)context).ObjectContext;
    var entity = objectContext.GetObjectByKey(yourEntityKey);
}
于 2014-01-01T14:56:51.963 回答
1

如果您知道要检索的实体的类型,则可以使用SetDbContext 上的方法获取 a DbSet,并使用Findon 方法DbSet通过其键获取实体。

var dbSet = dbContext.Set<TestTable>();
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value);

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

于 2014-01-02T13:34:43.777 回答