我一直在阅读教程(特别是使用 Linq-To-Entities 的教程)并且我了解基本概念,但是有些事情给我带来了问题。
这些教程通常只涉及简单的模型和表单,它们只使用基本的创建、更新和删除语句。我的稍微复杂一些,我不确定我是否以正确的方式进行处理,因为当需要处理六个数据库对象的关系时,教程不再提供帮助。
对于 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 to Entities 仅支持无参数构造函数和初始化程序。
这没什么大不了的,因为我很少需要构造函数中的逻辑,但是没有构造函数而只有公共属性是一个问题吗?