ASP.net Web API - 示例预先存在的数据库 Fluent NHibernate 和 Automapper
ASP.net Web API - Example pre-existing database Fluent NHibernate and Automapper
我正在研究 ASP.net Web API 2 本书 (Git Hub)
我正在尝试使用 Fluent NHibernate 和 Automapper 连接到数据库。这本书使用的是新数据库,而我的数据库是预先存在的,不一定由良好实践控制。
在加入 tables 等之前。我希望能够获得人员列表并通过 API 添加新人员。唯一的问题是,我想 return 少了实际 table 的属性,并创建了一个新人,甚至比用来显示新人的模型还要少。我无法理解自动映射器的流程。
一个例子 table 可能是
<pre>Person Entity
-person_id(int)
-person_name(varchar(100))
-person_location(int)
-person_phone(varchar(10))
-person_address(varchar(30))
</pre>
我要使用的模型包含实际 table 中项目的子集。例如,也许:
<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;}
在自动映射配置文件中,我有一个 class NewPersonToPersonEntityAutoMapperTypeConfigurator 和另一个 class 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>
任何人都可以向我展示一个像这样的简单场景的好例子,使用自动映射器和预先存在的 table 以及额外未使用的属性,或者描述 Automapper 应该做什么,或者我是否在正确的轨道上?
丹尼尔 - 我认为你走在正确的轨道上。是的,您需要每个 "direction"... 的 AutoMapper 映射,即到 EF 实体的传入服务消息,以及从 EF 实体到服务 return 消息。
您忽略某些属性的代码没有问题。您只需要确保正确填充实体以将 INSERT 插入数据库。例如,person_id 列 - 是否需要设置?或者那是一个自动递增的列??
换句话说...您当然可以对现有数据库使用 AutoMapper(以及我们在书中的方法)。它仍然只是将属性从一种类型映射到另一种类型。
随时按我的方式发送一些代码。
我正在研究 ASP.net Web API 2 本书 (Git Hub)
我正在尝试使用 Fluent NHibernate 和 Automapper 连接到数据库。这本书使用的是新数据库,而我的数据库是预先存在的,不一定由良好实践控制。
在加入 tables 等之前。我希望能够获得人员列表并通过 API 添加新人员。唯一的问题是,我想 return 少了实际 table 的属性,并创建了一个新人,甚至比用来显示新人的模型还要少。我无法理解自动映射器的流程。
一个例子 table 可能是
<pre>Person Entity
-person_id(int)
-person_name(varchar(100))
-person_location(int)
-person_phone(varchar(10))
-person_address(varchar(30))
</pre>
我要使用的模型包含实际 table 中项目的子集。例如,也许:
<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;}
在自动映射配置文件中,我有一个 class NewPersonToPersonEntityAutoMapperTypeConfigurator 和另一个 class 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>
任何人都可以向我展示一个像这样的简单场景的好例子,使用自动映射器和预先存在的 table 以及额外未使用的属性,或者描述 Automapper 应该做什么,或者我是否在正确的轨道上?
丹尼尔 - 我认为你走在正确的轨道上。是的,您需要每个 "direction"... 的 AutoMapper 映射,即到 EF 实体的传入服务消息,以及从 EF 实体到服务 return 消息。
您忽略某些属性的代码没有问题。您只需要确保正确填充实体以将 INSERT 插入数据库。例如,person_id 列 - 是否需要设置?或者那是一个自动递增的列??
换句话说...您当然可以对现有数据库使用 AutoMapper(以及我们在书中的方法)。它仍然只是将属性从一种类型映射到另一种类型。
随时按我的方式发送一些代码。