LINQ-to-SQL эквивалентен GetObjectByKey ADO.NET EF - PullRequest
0 голосов
/ 22 ноября 2010

Я написал несколько строк для получения объекта по его идентификатору. За кулисами он использует GetObjectByKey или TryGetObjectByKey, чтобы получить объект по его EntityKey, который можно построить. У LINQ to SQL есть что-то эквивалентное этому?

Спасибо.

1 Ответ

2 голосов
/ 22 ноября 2010

Вот что я использовал:

public virtual TEntity GetById(int id)
{
    var table = DataContext.GetTable<TEntity>();
    var mapping = DataContext.Mapping.GetTable(typeof(TEntity));
    var idProperty = mapping.RowType.DataMembers.SingleOrDefault(d => d.IsPrimaryKey);
    var param = Expression.Parameter(typeof(TEntity), "e");
    var predicate = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(
        Expression.Property(param, idProperty.Name), Expression.Constant(id)), param);
    return table.SingleOrDefault(predicate);
}

Я использую этот метод внутри общего Repository класса, который выглядит следующим образом:

public class Repository<TDataContext, TEntity> : IDisposable
    where TDataContext : DataContext
    where TEntity : class
{
    protected TDataContext DataContext { get; private set; }

    public Repository(TDataContext dataContext)
    {
        DataContext = dataContext;
    }

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...