Вам нужно всего лишь от 3 до 5 языков, чтобы сделать все. С является определенным. Может быть, сборка, но вы должны это знать и уметь ее использовать. Может быть, JavaScript и / или Java, если вы пишете код для Интернета. Язык оболочки, такой как bash, и один HLL, такой как Lisp, который может быть полезен. Все остальное отвлекает.
Я предпочитаю последнее, потому что ясно, что вы хотите. Используя EntityKey (а это то, что команда ADO.NET, похоже, не понимает), мы должны обойти структуру, навязанную нам Entity Framework. Используя язык запросов, как вы это делали во втором примере, мы говорим всем остальным разработчикам, которые когда-либо будут смотреть на наш код, эй, нам просто нужен этот объект с этим идентификатором или мы хотим null.
Я не думаю, что быть правым (как и в первом примере) является оправданием непонятности для ваших коллег. :)
В своем решении я использую универсальное программирование. В базовом классе Repository у меня есть код, подобный этому:
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();
}