Estoy construyendo una aplicación WPF usando el patrón MVVM. Nuestra pila se ve así:Entity Framework + POCO
SQL Server 2008 -> Marco de la entidad
Utilizamos StructureMap para la inyección de dependencias para inyectar nuestra DataFactory que esencialmente hace el CRUD para nuestros objetos de negocio POCO.
Los ViewModels usan DataFactory para CRUD y xaml son datos vinculados a las propiedades en POCO.
Todo funciona bien, pero lo único que me resulta un poco molesto es en la fábrica de datos. Copiamos cada propiedad desde el objeto EF hasta el POCO en seleccionar y viceversa en la actualización/inserción.
¿Hay alguna manera de automatizar este proceso como lo hace Fluent para NHibernate pero con Entity Framework?
Aquí es un método de muestreo de inserción en la fábrica de datos:
public void InsertCustomer(ref Manager.Model.Customer businessObject)
{
var mgr = new Manager.Data.PersonData.PersonContext();
var person = new Manager.Data.PersonData.Person();
var customer = new Manager.Data.PersonData.Customer();
customer.Comments = businessObject.Comments;
customer.Company = businessObject.Company;
customer.IsBusiness = businessObject.IsBusiness;
customer.IsCompleted = businessObject.IsCompleted;
customer.ModifiedBy = "someone";
customer.ModifiedOn = DateTime.Now;
customer.CreatedBy = "someone";
customer.CreatedOn = DateTime.Now;
person.Customer.Add(customer);
person.FirstName = businessObject.FirstName;
person.LastName = businessObject.LastName;
person.Birthday = businessObject.Birthday;
person.CreatedBy = "someone";
person.CreatedOn = DateTime.Now;
person.Gender = businessObject.Gender;
person.MiddleInitial = businessObject.MiddleInitial;
person.ModifiedBy = "someone";
person.ModifiedOn = DateTime.Now;
person.Nickname = businessObject.Nickname;
person.Picture = "";
person.Suffix = businessObject.Suffix;
person.Title = businessObject.Title;
mgr.AddToPeople(person);
mgr.SaveChanges();
}
que sería bueno para declarar una clase, como Fluido lo hace:
public class CatMap : ClassMap<Cat>
{
public CatMap()
{
Id(x => x.Id);
Map(x => x.Name)
.WithLengthOf(16)
.Not.Nullable();
Map(x => x.Sex);
References(x => x.Mate);
HasMany(x => x.Kittens);
}
}
Finalmente mi método de inserción se vería esto:
public void InsertCustomer(ref Manager.Model.Customer businessObject)
{
var mgr = new Manager.Data.PersonData.PersonContext();
var person = new Manager.Data.PersonData.Person();
var customer = new Manager.Data.PersonData.Customer();
Something.Map(person, businessObject);
Something.Map(customer, businessObject);
person.Customer.Add(customer);
mgr.AddToPeople(newCustomer);
mgr.SaveChanges();
}
Esencialmente eliminaría el código para mover datos del obj de negocios Con el objeto de trabajo de marco de entidad se realizaría una vez en la clase de mapeo y no tendría que repetirse para cada método.
Gracias!
algún código por favor? – chakrit