SqlQuery 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, и мне нужно было бы извлечь TableName из MetaData, то же самое с именем Id, которое также может отличаться от базы данных)
Или есть ли способ сделать это с помощью LINQ? (что я бы предпочел, так как мне не нужно было бы переводить вручную)
2 ответа
Если вы знаете тип сущности, которую вы извлекаете, вы можете использовать Set
метод на DbContext, чтобы получить DbSet
и Find
метод на DbSet
получить сущность по ключу (ключам).
var dbSet = dbContext.Set<TestTable>();
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value);
Find
метод знает, как включить использовать значение ключа, чтобы получить сущность; на самом деле, подпись Find(params object[])
так что вы можете передать несколько значений ключа, если ваша таблица имеет составной ключ (при условии, что они в правильном порядке).
Вы можете бросить свой DbContext
к IObjectContextAdapter
интерфейс и оттуда вы можете получить доступ к базовому ObjectContext
объект, который имеет GetObjectByKey
метод:
using (var context = new DbContext())
{
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var entity = objectContext.GetObjectByKey(yourEntityKey);
}