Настройка структуры EF-приложения

Я работаю над прототипом 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();
}

Почему-то это кажется неправильным и ошибочным, с другой стороны, просто создание экземпляров каждого репозитория в производном контексте тоже не очень хорошо из-за возможности создания экземпляров объектов, которые мне могут вообще не понадобиться.

Есть какие-нибудь советы о том, как сделать этот дизайн звучным? Я должен оставить это так? Что я должен добавлять или избегать при этом?

5
задан duress 5 August 2011 в 06:47
поделиться