Я работаю над прототипом EF-приложения, используя POCO. В основном как введение в фреймворк мне интересно найти хороший способ настроить приложение в красивой структуре. Позже я планирую включить в него WCF.
Я сделал следующее:
1) Я создал файл edmx, но со свойством генерации кода, установленным на None, и сгенерировал мою схему базы данных,
2) Я создал POCO, которые все выглядят так:
public class Person
{
public Person()
{
}
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
3) Я создал контекст
public class PocoContext : ObjectContext, IPocoContext
{
private IObjectSet<Person> persons;
public PocoContext() : base("name=PocoContainer", "PocoContainer")
{
ContextOptions.LazyLoadingEnabled = true;
persons= CreateObjectSet<Person>();
}
public IObjectSet<Person> Persons
{
get
{
return persons;
}
}
public int Save()
{
return base.SaveChanges();
}
}
Интерфейс выглядит следующим образом:
public interface IPocoContext
{
IObjectSet<Person> Persons { get; }
int Save();
}
4) Наконец, я создал репозиторий, реализующий интерфейс:
public class PersonRepository : IEntityRepository<Person>
{
private IPocoContext context;
public PersonRepository()
{
context = new PocoContext();
}
public PersonRepository(IPocoContext context)
{
this.context = context;
}
// other methods from IEntityRepository<T>
}
public interface IEntityRepository<T>
{
void Add(T entity);
List<T> GetAll();
T GetById(int id);
void Delete(T entity);
}
Теперь, когда я продолжаю экспериментировать с этим, этот дизайн побуждает меня создавать экземпляр репозитория каждый раз, когда я хочу получить или изменить некоторые данные, например:
using (var context = new PocoContext())
{
PersonRepository prep = new PersonRepository();
List<Person> pers = prep.GetAll();
}
Почему-то это кажется неправильным и ошибочным, с другой стороны, просто создание экземпляров каждого репозитория в производном контексте тоже не очень хорошо из-за возможности создания экземпляров объектов, которые мне могут вообще не понадобиться.
Есть какие-нибудь советы о том, как сделать этот дизайн звучным? Я должен оставить это так? Что я должен добавлять или избегать при этом?