Je construis une application WPF en utilisant le modèle MVVM. Notre pile ressemble à ceci:Entity Framework + POCO
SQL Server 2008 -> Entity Framework
Nous utilisons StructureMap pour l'injection de dépendance à injecter notre DataFactory qui fait essentiellement la CRUD pour nos objets métier POCO.
Les ViewModels utilisent la DataFactory pour CRUD et le xaml est lié aux propriétés des POCO.
Le tout fonctionne très bien, mais la seule chose que je trouve être un peu ennuyeux est dans la fabrique de données. Nous copions chaque propriété de l'objet EF sur le POCO un sur select et l'inverse sur la mise à jour/insertion.
Est-il possible d'automatiser ce processus comme le fait Fluent pour NHibernate mais avec Entity Framework?
Voici une méthode d'insertion d'échantillon dans l'usine de données:
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();
}
Ce serait bien de déclarer une classe, comme Fluent le fait:
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);
}
}
Enfin ma méthode d'insertion ressemblerait ceci:
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();
}
Essentiellement je éliminerais le code pour déplacer des données de l'obj affaires ect à l'objet de travail de trame d'entité, il serait effectué une fois dans la classe de mappage et n'aurait pas besoin d'être répété pour chaque méthode.
Merci!
Du code, s'il vous plaît? – chakrit