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);