Вопрос по linq, entity-framework, c#, asp.net – Получить отдельные сущности Entity Framework, используя запрос LINQ или GetObjectKey?
Похоже, что GetObjectKey обладает преимуществом поиска существующих, созданных экземпляров объектов и, затем, хранилища данных. Тем не менее, также кажется, что вы потеряли некоторую строгую типизацию, и вам нужно разыграть полученный объект:
GetObjectKey
<code>int customerID = 1; EntityKey key = new EntityKey("MyEntities.Customers", "CustomerID", customerID); Customer customer = context.GetObjectByKey(key) as Customer; </code>
vs. LINQ
<code>int customerID = 1; Customer customer = (from c in context.Customers where c.CustomerID = customerID select c).FirstOrDefault(); </code>
Лично я предпочитаю последний метод из-за набора текста. Кроме того, ваш DAL будет довольно единообразным, так как все методы Get являются запросами, хотя это всего лишь личное предпочтение.
Что вы, мальчики и девочки, используете?
потому что совершенно ясно, чего ты хочешь. Используя EntityKey (а это то, что команда ADO.NET, похоже, не понимает), мы должны обойти структуру, навязанную нам Entity Framework. Используя язык запросов, как вы это делали во втором примере, мы сообщаем всем остальным разработчикам, которые когда-либо будут смотреть на наш код: эй, мы просто хотим этот объект с этим идентификатором или мы хотим иметь значение null.
Я не думаю, что правильность (как и в первом примере) - это повод для того, чтобы не быть понятными своим коллегам. :)
позитория у меня есть такой код:
private string GetEnittySetName(string entityTypeName)
{
var container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
string entitySetName = (from meta in container.BaseEntitySets
where meta.ElementType.Name == entityTypeName
select meta.Name).FirstOrDefault();
return entitySetName;
}
private string entitySetName;
protected string EntitySetName
{
get
{
if (string.IsNullOrEmpty(entitySetName))
{
entitySetName = GetEnittySetName(typeof(T).Name);
}
return entitySetName;
}
}
public T SelectOne(Func<T, bool> exp)
{
return context.CreateQuery<T>(EntitySetName).Where(exp).FirstOrDefault();
}