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);
}
Другие вопросы по тегам