Tôi đang xây dựng một ứng dụng WPF bằng cách sử dụng mẫu MVVM. chồng của chúng tôi trông như thế này:Entity Framework + POCO
SQL Server 2008 -> Entity Framework
Chúng tôi sử dụng StructureMap cho dependency injection để tiêm DataFactory của chúng tôi mà về cơ bản hiện CRUD cho các đối tượng kinh doanh POCO của chúng tôi.
Chế độ xemMô hình sử dụng DataFactory cho CRUD và xaml là dữ liệu được liên kết với các thuộc tính trong POCO.
Toàn bộ nội dung hoạt động tuyệt vời nhưng điều duy nhất tôi thấy là phần nào gây phiền toái là trong nhà máy dữ liệu. Chúng tôi sao chép từng thuộc tính từ đối tượng EF sang đối tượng POCO được chọn và ngược lại khi cập nhật/chèn.
Có cách nào để tự động hóa quá trình này như Fluent không cho NHibernate nhưng với khung thực thể?
Dưới đây là một phương pháp mẫu chèn trong nhà máy dữ liệu:
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();
}
Nó sẽ được tốt đẹp để khai báo một số lớp, như thạo thực hiện nó:
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);
}
}
Cuối cùng phương pháp chèn của tôi sẽ như thế nào này:
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();
}
Về cơ bản tôi sẽ loại bỏ mã để di chuyển dữ liệu từ doanh nghiệp ect cho đối tượng làm việc của khung thực thể, nó sẽ được thực hiện một lần trong lớp ánh xạ và sẽ không phải lặp lại cho mỗi phương thức.
Cảm ơn!
Một số mã xin vui lòng? – chakrit