【问题标题】:ASP.net Web API - Example pre-existing database Fluent NHibernate and AutomapperASP.net Web API - 预先存在的数据库 Fluent NHibernate 和 Automapper 示例
【发布时间】:2016-04-19 00:25:06
【问题描述】:

我正在阅读 ASP.net Web API 2 书 (Git Hub)

我正在尝试使用 Fluent NHibernate 和 Automapper 连接到数据库。这本书使用了一个新的数据库,而我的数据库是预先存在的,不一定受良好实践的控制。

在加入表格等之前,我希望能够获取人员列表并通过 API 添加新人员。唯一的问题是我想返回实际表格的更少属性并创建一个新人,甚至比用于显示新人的模型还要少。我无法理解自动映射器的流程。

一个示例表可能是

<pre>Person Entity
-person_id(int)
-person_name(varchar(100))
-person_location(int)
-person_phone(varchar(10))
-person_address(varchar(30))
</pre>

我要使用的模型包括实际表中项目的子集。例如,也许:

<pre>Person Model
-person_id(int)
-person_name(varchar(100)
-person_location(int)</pre>

还有一个 newPerson 模型

<pre>NewPerson Model
-Name
-location</pre>

我有一个具有所有人员属性的实体,例如

public virtual int person_id {get;set;}

但我有一个具有子集属性的模型,例如

public long person_id {get; set;}

在自动映射配置文件中,我有一个类 NewPersonToPersonEntityAutoMapperTypeConfigurator,我还有另一个类 PersonEntityToPersonAutoMapperTypeConfigurator

我对自动映射器的工作方式感到困惑。 AutoMapper 文件 NewPersonToPersonEntityAutoMapperTypeConfigurator 是否应该使用类似

Mapper.CreateMap<NewPerson, PersonEntity>
.ForMember(opt => opt.person_id, x => x.Ignore())
...
.ForMember(opt => opt.person_address(varchar(30)))

虽然 PersonEntityToPersonAutoMapperTypeConfigurator 使用类似

Mapper.CreateMap<PersonEntity, PersonModel>

谁能给我看一个像这样的简单场景的好例子,比如 automapper 和一个带有额外未使用属性的预先存在的表,或者描述 Automapper 应该做什么,或者我是否走在正确的轨道上?

【问题讨论】:

    标签: sql-server asp.net-mvc poco domain-model


    【解决方案1】:

    Daniel - 我认为你走在正确的轨道上。是的,每个“方向”都需要一个 AutoMapper 映射......即传入服务消息到 EF 实体,以及从 EF 实体到服务返回消息。

    您忽略某些属性的代码很好。您只需要确保实体已正确填充以将 INSERT 插入数据库。例如,person_id 列 - 是否需要设置?还是那是一个自动递增的列??

    换一种说法...您当然可以针对现有数据库使用 AutoMapper(以及我们在书中的方法)。它仍然只是将属性从一种类型映射到另一种类型。

    请随时以我的方式发送一些代码。

    【讨论】:

    • 谢谢,我意识到我现在的问题是混淆了域模型和服务模型,当然事情并没有排好序。我现在是这样想的。 SQL Server Nhibernate Map 域模型 Automapper 服务模型。
    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多