Tôi đã đi qua các hướng dẫn (đặc biệt là những người sử dụng LINQ-To-Entities) và tôi hiểu các khái niệm cơ bản, tuy nhiên một số điều đang mang lại cho tôi các vấn đề.Ứng dụng ASP.NET MVC của tôi có được cấu trúc đúng cách không?
Các hướng dẫn thường chỉ liên quan đến các mô hình và biểu mẫu đơn giản chỉ sử dụng các câu lệnh tạo, cập nhật và xóa cơ bản. Mỏ phức tạp hơn một chút, và tôi không chắc mình sẽ đi đúng hướng bởi vì khi đến lúc xử lý các mối quan hệ của một nửa tá đối tượng cơ sở dữ liệu, các hướng dẫn sẽ dừng lại.
Đối với bài phương pháp, cách thông thường thực hiện các thao tác CRUD
entities.AddToTableSet(myClass);
entities.SaveChanges();
Sẽ không làm những gì tôi muốn, bởi vì một lớp học thực hiện đầy đủ là không nhận được được đưa lên các phương pháp điều khiển. Tôi có thể đăng từng trường, bộ sưu tập biểu mẫu hoặc nhiều đối tượng DTO rồi gọi phương thức trên dịch vụ hoặc kho lưu trữ để lấy thông tin tôi nhận được từ bài đăng biểu mẫu, cùng với thông tin cần truy vấn hoặc tự tạo và sau đó từ tất cả những điều đó, tạo đối tượng cơ sở dữ liệu của tôi mà tôi có thể lưu.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
Tôi có xử lý chính xác hoặc tôi đang bế khuôn khung công tác không? Tôi không bao giờ thực sự sử dụng một đối tượng thực thể trực tiếp, bất cứ khi nào tôi truy vấn một đối tượng, tôi đặt thông tin mình cần trong một DTO và căn cứ vào các Views của tôi. Cùng đi với sáng tạo. Điều này có được phép hay là việc tránh sử dụng các thực thể trực tiếp chống lại mục đích sử dụng khung công tác?
Chỉnh sửa: Tôi cũng lo lắng về phương pháp này vì nó đòi hỏi nhà xây dựng có sản phẩm nào để làm đúng các truy vấn LINQ vì thông báo lỗi này:
Chỉ constructor parameterless và initializers được hỗ trợ trong LINQ to Entities .
Đây không phải là vấn đề lớn vì tôi hiếm khi cần logic trong các nhà xây dựng, nhưng đây có phải là vấn đề không có nhà thầu và chỉ các thuộc tính công khai không?
Ngữ cảnh đối tượng được sử dụng bởi LINQ to Entities sử dụng sự phản chiếu để tạo các đối tượng từ ánh xạ dữ liệu, điều quan trọng và yêu cầu tất cả các thực thể đều có một hàm tạo tham số để nó có thể được khởi tạo nếu bạn muốn có thể sắp xếp theo kiểu của mình sẽ cần một nhà xây dựng công cộng quá – dmportella