我已经读过Entity Framework(我使用的是EF6)是数据库的抽象。我正在使用viewmodels将数据提供给我的视图,因此EF实体不会通过我的控制器。我正在使用带有linq查询的存储库来获取数据。在控制器中,我实例化repo并获取数据。
那么有没有理由为控制器和repo之间的事务创建一个专用对象?
示例:
数据库有一个表Person。
在MVC应用程序中,我创建了一个edmx文件,它创建了一个名为Person的部分类。
在我的存储库中:
class Person PersonRepository()
{
public Person GetPerson()
{
using (var db = new MyEntity())
{
var data = db.Person.FirstOrDefault();
var person = new Person()
{
Id = data.PersonId,
FirstName = data.FirstName,
LastName = data.LastName
};
return person;
}
}
或者我需要这样做:
class Person PersonRepository()
{
public Person GetPerson()
{
using (var db = new MyEntity())
{
var data = db.Person.FirstOrDefault();
var person = new PersonDTO()
{
Id = data.PersonId,
FirstName = data.FirstName,
LastName = data.LastName
};
return person;
}
}
答案 0 :(得分:2)
这完全取决于您的应用程序的预期复杂性。所以没有办法做这样的事情。 基本上,DTO类应仅包含需要转移到前端层的字段,而ViewModel类包含专门适用于视图的数据。 如果这些对象的设计是相同的,即如果业务层不会被某些视图特定的逻辑和概念所污染,或者视图层不会受到污染,则必须问自己一个问题。一些数据/业务层相关的逻辑。 如果应用程序不是那么大,并且视图所需的数据以及从存储库获得的数据预计不会有太大差异,那么您可以只使用ViewModel类,但是如果存在一些差异,或者可能在未来,最好有单独的类并处理映射器上的差异。