我一直在瀏覽教程(特別是使用Linq-To-Entities的教程),並且我理解基本概念,但有些東西給我提出了一些問題。我的ASP.NET MVC應用程序結構是否正確?
本教程通常只涉及簡單的模型和形式,只使用基本的創建,更新和刪除語句。我的情況稍微複雜一點,我不確定我是否正確地做這件事,因爲當處理六個數據庫對象的關係時,教程停止提供幫助。
對於POST方法,執行CRUD操作
entities.AddToTableSet(myClass);
entities.SaveChanges();
不會做我想做的,因爲完全實現的類不獲取發佈到控制器方法的常用方式。我可能會發布單個字段,表單集合或多個DTO對象,然後調用服務或存儲庫上的方法來獲取我從表單帖子收到的信息以及它需要查詢或創建的信息,然後從所有這些東西,創建我可以保存的數據庫對象。
[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();
}
我正確地處理這個問題還是我混蛋框架?我從來沒有直接使用實體對象,每當我查詢一個我在DTO中放置需要的信息並將其視爲基於我的視圖時。創作也一樣。這是允許的,還是我避免使用實體直接違背使用框架的目的?
編輯:我也擔心這種方法,因爲它需要空構造做正確,因爲此錯誤信息的LINQ查詢:
只有參數構造函數和 初始化在LINQ的支持,以 實體。
這不是什麼大不了的事情,因爲我很少需要構造函數中的邏輯int,但是這是沒有構造函數和公共屬性的問題嗎?
Linq to Entities使用的objectcontext使用反射來創建數據映射中的對象,因此很重要,並且要求所有實體都有一個無參數的構造函數,以便可以初始化,如果您希望能夠序列化您的類型也需要一個公共的構造函數 – dmportella 2009-09-28 12:04:30