Pracuję nad prototypową aplikacją EF, używając POCO. Głównie jako wprowadzenie do frameworku zastanawiam się nad dobrym sposobem na skonfigurowanie aplikacji w ładnej strukturze. Później zamierzam włączyć do niego WCF.Konfigurowanie struktury aplikacji EF
Co robiłem jest następujący:
1) stworzyłem plik edmx, ale z kodem Generation Własności ustawione na None i generowane moje schematu bazy danych,
2) I stworzył Poços które wszystkie wyglądają tak:
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) I stworzył kontekst
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();
}
}
Interfejs wygląda następująco:
public interface IPocoContext
{
IObjectSet<Person> Persons { get; }
int Save();
}
4) Na koniec I stworzył repozytorium, wdrożenie interfejsu:
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);
}
Teraz, kiedy się na zabawy z tym, ta konstrukcja dyktuje mi instancję repozytorium każdym razem, gdy chcesz pobrać lub mutować niektóre dane, jak poniżej:
using (var context = new PocoContext())
{
PersonRepository prep = new PersonRepository();
List<Person> pers = prep.GetAll();
}
Jakoś to po prostu czuje się źle i wadliwa, z drugiej strony, po prostu każdy instancji repozytorium w DE kontekst rived też nie jest zbyt dobry, ponieważ potencjalnie tworzy obiekty, których w ogóle nie potrzebuję.
Jakieś wskazówki, jak sprawić, by ten projekt brzmiał? Czy powinienem to zostawić w ten sposób? Jakiekolwiek rzeczy, które ogólnie powinienem dodać lub czego unikać?
Jaki to rodzaj aplikacji. Webservice, WPF-app, coś jeszcze? – alun
W tym stanie jest to po prostu aplikacja konsolowa, ponieważ jest to tylko czysty prototyp. – duress
Powodem, dla którego pytam, jest to, że sposób obsługi kontekstu jest silnie uzależniony od rodzaju aplikacji. Powszechnie jest na przykład mieć jeden kontekst na formularz w aplikacji wpf i jeden kontekst na żądanie http w aplikacji internetowej i jeden kontekst na wywołanie metody w usłudze internetowej. – alun