gpt4 book ai didi

NHibernate、AutoMapper 和 ASP.NET MVC

转载 作者:行者123 更新时间:2023-12-01 05:43:55 24 4
gpt4 key购买 nike

我想知道使用 NHibernate、AutoMapper 和 ASP.NET MVC 的“最佳实践”。目前,我正在使用:

class Entity
{
public int Id { get; set; }
public string Label { get; set; }
}

class Model
{
public int Id { get; set; }
public string Label { get; set; }
}

实体和模型映射如下:
Mapper.CreateMap<Entity,Model>();
Mapper.CreateMap<Model,Entity>()
.ConstructUsing( m => m.Id == 0 ? new Entity() : Repository.Get( m.Id ) );

在 Controller 中:
public ActionResult Update( Model mdl )
{
// IMappingEngine is injected into the controller
var entity = this.mappingEngine.Map<Model,Entity>( mdl );

Repository.Save( entity );

return View(mdl);
}

这是正确的,还是可以改进?

最佳答案

这就是我在一个项目中所做的:

public interface IBuilder<TEntity, TInput>
{
TInput BuildInput(TEntity entity);
TEntity BuildEntity(TInput input);
TInput RebuildInput(TInput input);
}

为每个实体或/和某些实体组实现此接口(interface),您可以做一个通用接口(interface)并在每个 Controller 中使用它;使用 IoC;

您将映射代码放在前两种方法中(映射技术无关紧要,您甚至可以手动完成)
并且 RebuildInput 用于当您获得 ModelState.IsValid == false 时,只需再次调用 BuildEntity 和 BuildInput。

以及在 Controller 中的用法:
        public ActionResult Create()
{
return View(builder.BuildInput(new TEntity()));
}

[HttpPost]
public ActionResult Create(TInput o)
{
if (!ModelState.IsValid)
return View(builder.RebuildInput(o));
repo.Insert(builder.BuilEntity(o));
return RedirectToAction("index");
}

我实际上有时会做用于更多实体的通用 Controller
喜欢这里: asp.net mvc generic controller

编辑:
您可以在此处的 asp.net mvc 示例应用程序中看到此技术:
http://prodinner.codeplex.com

关于NHibernate、AutoMapper 和 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com