正如您所描述的,我将我的项目分为两个。
我想在 Models 文件夹中维护另一层 pocos 但这似乎不对
我想你会发现你最终会构建这个层。
这是两个项目Project.Data和Project.Web。Project.Web 具有对 Project.Data 的项目引用。
- Project.Data.Models:实体
- Project.Web.Models:DTO、ViewModels
我的观点从不直接引用实体。我将使用 AutoMapper 将实体映射到 DTO 或 ViewModel。这发生在我的服务中,它位于自己的命名空间下的Project.Web中。我的服务从不返回实体类型,我的视图只使用 ViewModel。
interface IFooService
{
FooDTO GetFoo(int id);
}
public class FooService : IFooService
{
public FooDTO GetFoo(int id)
{
var foo = dbContext.Foo.Where(f => f.Id == id).Select(f => new FooDTO {
Bar = f.Bar,
Blah = f.Blah
}).FirstOrDefault();
// I let AutoMapper take care of the mapping for me
var foo = Mapper.Map<FooDTO>(dbContext.Foo.Where(f => f.Id == id).FirstOrDefault());
return foo;
}
}
控制器动作:
public ActionResult FooDetails(int id)
{
FooViewModel foo = Mapper.Map<FooViewModel>(fooService.GetFoo(id));
return View(foo);
}
编辑:
添加花药模型层来映射实体 => DTO => 查看模型