【发布时间】:2018-03-02 11:51:45
【问题描述】:
在映射相互引用的嵌套类时遇到问题。实体框架在循环中流行嵌套实体,因此我最终在映射后将父实体嵌套在嵌套子实体中。
我制作了一个示例程序,您可以复制粘贴来显示问题。在我的实际程序中,我正在映射集合,因此需要循环整个集合以将所有嵌套对象设置为 null,这感觉不太好,如果可能的话,我宁愿调整我的映射规则。
这是显示问题的代码:
using AutoMapper;
public class Job
{
public string Name { get; set; }
public PayPackage PayPackage { get; set; }
}
public class PayPackage
{
public string Name { get; set; }
public Job Job { get; set; }
}
public class JobViewModel
{
public string Name { get; set; }
public PayPackageViewModel PayPackage { get; set; }
}
public class PayPackageViewModel
{
public string Name { get; set; }
public JobViewModel Job { get; set; }
}
class Program
{
static void Main(string[] args)
{
var job = new Job
{
Name = "Job Name",
PayPackage = new PayPackage
{
Name = "Pay Package Name"
}
};
job.PayPackage.Job = job; //simulate how EF is populating entity
var config = new MapperConfiguration(c =>
{
c.CreateMap<Job, JobViewModel>();
c.CreateMap<JobViewModel, Job>();
c.CreateMap<PayPackage, PayPackageViewModel>();
c.CreateMap<PayPackageViewModel, PayPackage>();
});
var mapper = config.CreateMapper();
var jobVm = mapper.Map<JobViewModel>(job);
Assert.IsTrue(jobVm.PayPackage != null);
Assert.IsTrue(jobVm.PayPackage.Job == null); //how do I specify mapping so this passes?
}
}
避免父级在映射结果中出现两次的最佳方法是什么?
【问题讨论】:
-
出于好奇 - 为什么要这样做?例如。序列化时是否要防止递归异常?
-
所以我不会为每条记录返回两次工作
-
虽然这两个实例都是对同一个对象的引用。这会导致您的应用出现什么现实问题?
-
在我的应用程序中,我有支付包的返回集合的端点,并且嵌套的工作详细信息使支付包再次嵌套。所以我两次返回相同的数据。它可以忽略,但我宁愿不要两次返回相同的数据
标签: c# automapper