Domain driven design 实体框架中的Automapper Stackoverflow异常

Domain driven design 实体框架中的Automapper Stackoverflow异常,domain-driven-design,automapper,entity-framework-core,one-to-one,Domain Driven Design,Automapper,Entity Framework Core,One To One,在相当复杂的DDD设置中,我们有数据模型和域模型。从技术上讲,它们与通常具有附加属性的域模型非常相似。我们使用Automapper在数据和域对象之间进行映射。问题是在一些奇怪的情况下,在SaveAsync上,我们遇到了堆栈溢出异常。代码如下: 1) public virtual async Task SaveAsync(TDomain item) 2) { 3) TData data = null; 4) if (default(TID).Equals(i

在相当复杂的
DDD
设置中,我们有数据模型和域模型。从技术上讲,它们与通常具有附加属性的域模型非常相似。我们使用
Automapper
在数据和域对象之间进行映射。问题是在一些奇怪的情况下,在
SaveAsync
上,我们遇到了
堆栈溢出异常。代码如下:

1)    public virtual async Task SaveAsync(TDomain item)
2)    {
3)        TData data = null;
4)        if (default(TID).Equals(item.ID))
5)        {
6)            data = mapper.Map<TData>(item);
7)
8)            dataContext.Set<TData>().Add(data);
9)        }
10)       else
11)       {
12)           data = dataContext.Set<TData>().Single(x => x.ID.Equals(item.ID));
13)           if (data == null)
14)               throw new Exception($"Unable to find {typeof(TData)} with ID {item.ID} in the database.");
15)
16)           mapper.Map(source: item, destination: data);
17)       }
18)       await dataContext.SaveChangesAsync(userIdentity.ID);
19)
20)       // Update the IDs of the item and its children
21)       var domainTest = mapper.Map<TDomain>(data);
22)       mapper.Map(source: domainTest, destination: item);
23)   }

您会得到相同的
堆栈溢出异常

现在,我添加了一个
bool is….=true
save方法的可选参数,仅当此参数为true时,我才计算第22行。在这种无限递归中,我传递一个
false
。。。我知道这是真的黑客,所以我希望有人回应一个实际的解决方案。。。但这让我可以继续我的项目

mapper.Map(source: data, destination: item);