В конце концов, я приспособил @ ответ Марка, отсюда: C# Linq-SQL: An UpdateByID method for the Repository Pattern
В результате получается нечто вроде этого:
public TModel GetByPrimaryKey(Guid key)
{
// get the row from the database using the meta-model
MetaType meta = _DB.Mapping.GetTable(typeof(TModel)).RowType;
if (meta.IdentityMembers.Count != 1) throw new InvalidOperationException("Composite identity not supported");
string idName = meta.IdentityMembers[0].Member.Name;
var param = Expression.Parameter(typeof(TModel), "row");
var lambda = Expression.Lambda<Func<TModel, bool>>(
Expression.Equal(
Expression.PropertyOrField(param, idName),
Expression.Constant(key, typeof(Guid))), param);
return _DB.GetTable<TModel>().FirstOrDefault(lambda);
}
... где _DB - DataContext
.
Я надеюсь, что это поможет кому-то в будущем.
спасибо - я должен был быть яснее с самого начала. Моя цель - использовать эту информацию в универсальном методе getbyprimarykey. Я обновил вопрос. – Remus 2010-11-23 01:09:05