Estoy trabajando en una aplicación prototipo EF, utilizando POCO. Principalmente como introducción al framework me pregunto acerca de una buena manera de configurar la aplicación en una estructura agradable. Más tarde, planeo incorporar WCF en él.Configuración de la estructura de una aplicación EF
Lo que he hecho es el siguiente:
1) que crea un archivo edmx, pero con la propiedad de generación de código configurado en Ninguno y genera mi esquema de base de datos,
2) que creó el POCOs todos los cuales se ven como:
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) he creado un contexto
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();
}
}
La interfaz se parece a esto:
public interface IPocoContext
{
IObjectSet<Person> Persons { get; }
int Save();
}
4) Por último he creado un repositorio, la implementación de una interfaz:
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);
}
Ahora, cuando me subo a jugar con esto, este diseño me dicta para crear una instancia un repositorio cada vez que quiero a buscar o mutar algunos datos, como esto:
using (var context = new PocoContext())
{
PersonRepository prep = new PersonRepository();
List<Person> pers = prep.GetAll();
}
de alguna manera esto sólo se siente mal y defectuosa, por el contrario, solo una instancia de cada repositorio en el de El contexto rived tampoco se siente demasiado bien, debido a la posibilidad de instanciar objetos que podría no necesitar en absoluto.
¿Algún consejo sobre cómo hacer que este diseño suene? ¿Debo dejarlo así? ¿Alguna cosa que deba agregar o evitar en general al hacer esto?
¿Qué tipo de aplicación es? Servicio web, WPF-app, ¿algo más? – alun
En este estado, es solo una aplicación de consola, ya que es solo un prototipo al mínimo. – duress
La razón por la que pregunto es que la forma en que manejas tu contexto está muy influenciada por el tipo de aplicación. Es común, por ejemplo, tener un contexto por formulario en una aplicación wpf y un contexto por solicitud http en una aplicación web y un contexto por llamada de método en un servicio web. – alun