我正在使用Automapper,我有以下场景:类OrderModel有一个名为'ProductName'的属性,它不在数据库中.所以当我尝试使用以下方法进行映射时:
Mapper.CreateMap<OrderModel, Orders>();
Run Code Online (Sandbox Code Playgroud)
它会生成一个异常:
"Project.ViewModels.OrderModel上的以下1个属性未映射:'ProductName'
我已经阅读了AutoMapper的Wiki for Projections相反的情况(额外的属性在目的地,而不是在源,这实际上是我的情况)
如何避免使用automapper来映射此属性?
每次我在StackOverflow上寻找AutoMapper时,我都在阅读有关ValueInjecter的内容.
有人能告诉我它们之间的优缺点(性能,功能,API使用,可扩展性,测试)吗?
我的目标是配置objectMapper它只序列化带注释的元素@JsonProperty.
为了做到这一点,我按照这个解释说明了如何配置对象映射器.
我在这里描述了自定义objectmapper .
但是,当NumbersOfNewEvents序列化类时,它仍然包含json中的所有属性.
有人有提示吗?提前致谢
杰克逊1.8.0春季3.0.5
CustomObjectMapper
public class CompanyObjectMapper extends ObjectMapper {
public CompanyObjectMapper() {
super();
setVisibilityChecker(getSerializationConfig()
.getDefaultVisibilityChecker()
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
}
}
Run Code Online (Sandbox Code Playgroud)
servlet.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="de.Company.backend.web" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</list>
</property>
</bean>
<bean id="jacksonObjectMapper" class="de.Company.backend.web.CompanyObjectMapper" />
</beans>
Run Code Online (Sandbox Code Playgroud)
NumbersOfNewEvents
public class …Run Code Online (Sandbox Code Playgroud) 我是域驱动设计的新手,但想要学习它并将其用于新的应用程序.我将使用Entity Framework进行数据访问.
到目前为止的基本布局是:
ASP.NET MVC和其他客户端(移动设备等)
|
Web服务
|
域模型(服务,存储库,聚合,实体和值对象)
|
数据访问层(实体框架)
|
数据存储(SQL Server)
在数据访问层和域模型之间传输数据的最佳方法是什么?我认为域模型中的实体是POCO对象,它们应该映射到Entity Framework对象/从Entity Framework对象映射.这是一个好的解决方案吗?
如果是这样的话:
这种映射应该如何以及在何处发生?(域模型层或数据访问层)
我应该在何处以及如何查询实体框架(即根据搜索返回列表)?
c# domain-driven-design entity-framework visual-studio-2008 object-object-mapping
我目前正在使用Dozer将Entity对象映射到Dto项目中的对象.
我的问题是如何限制内部映射的级别或深度?
例如我有一个AccountProfile其中有一个实体List<AccountProfileDetail>的实体作为成员.此外,AccountProfileDetail它本身也有一个FinancialTransLimit实体作为成员.
现在我想告诉映射器,例如只做映射depth = 2.因此该FinancialTransLimit成员不会被复制到AccountProfileDetail目标对象的成员.
我需要使用Programming API而不是在xml中指定深度.但是,我也没有在xml配置中找到它.
我也试过Orika,但我也没能在Orika找到这样的功能!
以下两个代码(用于使用Dozer和Orika作为替代方案进行测试)可以正常工作并进行深层复制.我需要限制其中至少一个的深度.
有人可以帮帮我吗?
非常感谢!
示例代码:
AccountProfile
//My Entities:
import java.util.List;
public class AccountProfile{
private Long id;
private String name;
private List<AccountProfileDetail> accountProfileDetails;
public AccountProfile() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String …Run Code Online (Sandbox Code Playgroud) 我有Object1和Object2.现在,我想映射object3,其中包含1和2的属性.
说,我有2个对象:
1. User: {first_name, last_name, id}
2. Address: {street, locality, city, state, pin, id}
Run Code Online (Sandbox Code Playgroud)
现在,有了这些,我想把它映射到
User_View: {firstName, lastName, city, state}.
Run Code Online (Sandbox Code Playgroud)
其中,first_name和last_name来自User对象,来自Address对象的city&state.
现在,我的问题是,怎么做?
但是,目前,我这样做
@Mapper
public abstract class UserViewMapper {
@Mappings({
@Mapping(source = "first_name", target = "firstName"),
@Mapping(source = "last_name", target = "lastName"),
@Mapping(target = "city", ignore = true),
@Mapping(target = "state", ignore = true)
})
public abstract UserView userToView(User user);
public UserView addressToView(UserView userView, Address address) {
if (userView == null) {
return null;
}
if (address == null) …Run Code Online (Sandbox Code Playgroud) 我想映射以下类
class Schedule {
ZoneId timezoneId;
List<AvailabilityRule> rules;
}
Run Code Online (Sandbox Code Playgroud)
class AvailabilityRule {
long startEpoch;
long endEpoch;
}
Run Code Online (Sandbox Code Playgroud)
到这些课程。
class ScheduleDTO {
String timezone;
List<AvailabilityRuleDTO> rules;
}
Run Code Online (Sandbox Code Playgroud)
class AvailabilityRuleDTO {
ZonedDateTime startTime;
ZonedDateTime endTime;
}
Run Code Online (Sandbox Code Playgroud)
timezoneId计算时startEpoch需要和startTime。
Instant instant = Instant.ofEpochMilli(startEpoch);
ZonedDateTime zonedDateTime = instant.atZone(timezoneId);
Run Code Online (Sandbox Code Playgroud)
我如何使用mapstruct 来实现这一点?
我想要的伪代码
@Mapping(source = {"startEpoch", "timezoneId"}, target = "startTime", qualifiedByName = "epochToString")
AvailabilityRuleDTO toAvailabilityRuleDTO(AvailabilityRule
availabilityRule, Schedule schedule);
Run Code Online (Sandbox Code Playgroud) 我使用 ModelMapper Framework ( http://modelmapper.org/ ) 在 Java 中映射对象。我在映射包含抽象类的具体类(DTO 到实体)时遇到了问题。
示例:任务有一个 AbstractItems 列表。
AbstractItems 是问题和标准。
public class TaskDTO {
...
private List<AbstractItemDTO> items;
}
Run Code Online (Sandbox Code Playgroud)
映射方法:
// task is an TaskDTO object
return getModelMapper().map(task, TaskEntity.class);
Run Code Online (Sandbox Code Playgroud)
ModelMapper 尝试创建 AbstractItem 的新实例,该实例引发异常。有没有办法在运行时映射抽象类?
喜欢 QuestionDTO -> Question, CriteriaDTO -> Criteria
我一直在阅读Tim McCarthy 关于.NET中DDD的精彩书籍.但是在他的示例应用程序中,他的基础数据访问是使用SqlCE并且他手工编写SQL内联.
我一直在使用一些模式来利用Entity Framework,但我已经陷入了如何将IRepository linq查询映射到底层数据访问层的问题.
我有一个名为的具体存储库实现.
public EFCustomerRepository : IRepository<DomainEntities.Customer>
{
IEnumerable<DomainEntities.Customer> GetAll(
Expression<Func<DomainEntities.Customer, bool>> predicate)
{
//Code to access the EF Datacontext goes here...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的EF模型中,我正在使用POCO实体,但即便如此,我的DomainEntity.Customer和我的DataAccessLayer.Customer对象之间也没有原生映射.
所以我不能只Expression<Func<DomainEntities.Customer, bool>> predicate作为参数传递给EFContext.Customers.Where(...);
是否有一种简单的方法来映射
Expression<Func<T, bool>> predicate=>Expression<Func<TOTHER, bool>> predicate
或者我这样做是错的?任何建议/指针赞赏.
c# linq domain-driven-design entity-framework object-object-mapping
我的Controller返回一个MyObj对象列表(使用@ResponseBody)
public MyObj
{
int a;
int b;
}
Run Code Online (Sandbox Code Playgroud)
返回JSON如下所示:
[{"a":1,"b":2},{"a":2,"b":2}]
Run Code Online (Sandbox Code Playgroud)
我想包装这个JSON,所以它将返回如下内容:
{ "data": [{"a":1,"b":2},{"a":2,"b":2}]}
Run Code Online (Sandbox Code Playgroud)
从我读到的我需要启用SerializationConfig.Feature.WRAP_ROOT_VALUE或(?)在我的控制器上使用@JsonRootName("data").
还尝试了@XmlRootElement,似乎没什么用.知道用根名称包装对象列表的正确方法是什么?