EF: Могу ли я иметь одну точку для преобразования экземпляров лямбда-класса? - PullRequest
2 голосов
/ 28 сентября 2010

Я использую ADO.NET Entity Framework с несколькими методами уровня доступа к данным, которые возвращают одну и ту же сущность домена. Пусть будет:

class PersonEntity {
  public int Id { get; set; }
  public string Name { get; set; }
}

и методы возвращают сущность Person по разным критериям:

PersonEntity GetById(int id) {
  return db.Person.FirstOrDefault(x => new PersonEntity { Id = x.Id, Name = x.Name });
}

IQueryable<PersonEntity> GetByName(string name) {
  return db.Person.Where(x => x.Name == name).Select(x => new PersonEntity { Id = x.Id, Name = x.Name });
}

e.t.c. Блок кода x => new PersonEntity { Id = x.Id, Name = x.Name } является очень повторяющимся (это очень раздражает для многих полей), но я не мог поместить его в одну точку, например статический метод:

PersonEntity ConvertToPersonEntity(Person x) {
  return new PersonEntity { Id = x.Id, Name = x.Name }
}

Такой внешний вызов функции не может быть переведен в операторы SQL. Есть ли обходной путь для сохранения конверсии в одном месте?

Заранее спасибо!

1 Ответ

3 голосов
/ 28 сентября 2010

Да, вы можете сделать:

Expression<Func<Person, PersonEntity>> ConvertToPersonEntity() {
  return x => new PersonEntity { Id = x.Id, Name = x.Name };
}

... а затем:

PersonEntity GetById(int id) {
  var exp = ConvertToPersonEntity();
  return db.Person.FirstOrDefault(exp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...