我一直在浏览教程(特别是使用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