Я лично использую репозиторий универсального типа, и у меня есть чтение AsQueryable()
Вот интерфейс.
interface IRepository<T>
{
void Create(T item);
IQueryable<T> Retrieve();
void Update(T item);
void Delete(T item);
void SubmitChanges();
}
и вот реализация.
public class PersonsRepository : IRepository<Person>
{
private DataContext dc;
public PersonsRepository(DataContext dataContext)
{
dc = dataContext;
}
public void Create(Person Person)
{
dc.Persons.Add(Person);
}
public IQueryable<Person> Retrieve()
{
IQueryable<Person> Person = (from s in dc.Persons
select s);
return Person.AsQueryable();
}
public void Update(Person Person)
{
Person _Person = (from s in dc.Persons
where s.ID == Person.ID
select s).Single();
{
_Person.LastLogin = Person.LastLogin;
_Person.Password = Person.Password;
_Person.LastUpdate = Person.LastUpdate;
// Cannot change your username.
}
}
public void Delete(Person Person)
{
dc.Persons.Remove(Person);
}
public void SubmitChanges()
{
dc.SaveChanges();
}
}
Теперь, если вам нужно запросить репозиторий, вы хотите сделать что-то вроде этого.
прости меня, приведенный ниже код не проверен, и я на самом деле больше похож на парня из VB: (
надеюсь, вы получитеточка
public class PersonsService
{
private PersonRepository<Person> personRepository;
public PersonService()
{
personRepository = new PersonRepository<Person>();
}
public UsablePerson GetPersonByID(int ID)
{
UsablePerson person = (from p in personRepository<Person>.Retrieve
where p.ID = ID
select new UsablePerson { p.FirstName,
p.LastName,
p.EmailAddress }).FirstOrDefault();
return person;
}
}
В своих целях я использую LINQ для этого конкретного проекта, но его можно адаптировать к любому уровню данных, который вам нравится ... в этом прелесть уровня репозитория.
Отсюда «лично» у меня также есть Сервисный уровень, который имеет дело с нюансами подключения к данным ... такими вещами, как GetPersonByID
или GetPeopleSince(DateTime marker)
. Именно здесь я убираю информацию, которую я не получаю.t (IE: пароли) и сохраните оставшуюся информацию либо в ViewModel, либо в другом POCO.