我想基于一个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做到这一点呢?(我更喜欢这样,因为我不需要手动翻译)
发布于 2014-01-02 13:34:43
如果您知道要检索的实体的类型,可以使用DbContext上的DbContext方法获取DbSet,在DbSet上使用Find方法通过其键获取实体。
var dbSet = dbContext.Set<TestTable>();
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value);Find方法知道如何使用键值来获取实体;实际上,签名是Find(params object[]),因此如果表中有一个复合键(只要它们的顺序正确),您就可以传递多个键值。
发布于 2014-01-01 14:56:51
您可以将您的DbContext转换为IObjectContextAdapter接口,然后您可以访问具有 method的底层ObjectContext对象。
using (var context = new DbContext())
{
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var entity = objectContext.GetObjectByKey(yourEntityKey);
}https://stackoverflow.com/questions/20680169
复制相似问题