如果我使用EF和视图模型,我需要创建dto吗?
本文关键字:创建 dto 模型 EF 视图 如果 | 更新日期: 2023-09-27 18:06:40
我读到实体框架(我使用EF6)是从数据库的抽象。我使用视图模型将数据提供给我的视图,这样EF实体就不会越过我的控制器。我正在使用与linq查询的存储库来获取数据。在控制器中,我实例化了repo并获取了数据。
那么,是否有理由为控制器和回购之间的事务创建一个专用对象呢?
的例子:
数据库中有一个Person表。
在MVC应用程序中,我创建了一个edmx文件,它创建了一个名为Person的部分类。
In my Repository:
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;
}
}
这完全取决于应用程序的预期复杂性。所以做这些事情没有单一的方法。基本上,DTO类应该只包含需要传输到前端层的字段,而ViewModel类则包含专门针对视图的数据。你必须问自己一个问题,这些对象的设计是否相同,也就是说,如果业务层不会被一些特定于视图的逻辑和概念所污染,或者如果视图层不会被一些数据/业务层相关的逻辑所污染。如果应用程序不是很大,并且视图所需的数据和从存储库获得的数据预计不会有太大的不同,那么您可以只坚持使用ViewModel类,但是如果存在一些差异,或者将来可能存在差异,那么最好使用单独的类并在映射器上处理差异。