C# 创建DTO时,有点困惑
刚刚注册。第一个问题:) 如果在我的域模型实体国家/地区中有Name属性和List of State属性。此外,州有名称,州财产清单,州有市,最末端是城市实体 为了更好地说明:我正在尝试将CountryEntity与CountryDTO系列化,我的构造函数如下所示:C# 创建DTO时,有点困惑,c#,dto,C#,Dto,刚刚注册。第一个问题:) 如果在我的域模型实体国家/地区中有Name属性和List of State属性。此外,州有名称,州财产清单,州有市,最末端是城市实体 为了更好地说明:我正在尝试将CountryEntity与CountryDTO系列化,我的构造函数如下所示: public CountryDTO(Country x) { Name = x.Name; StateList = new List<StateDTO>();
public CountryDTO(Country x)
{
Name = x.Name;
StateList = new List<StateDTO>();
foreach (State state in x.States)
{
StateDTO stateDto = new StateDTO(state);
StateList.Add(stateDto);
}
}
public CountryDTO(国家x)
{
Name=x.Name;
StateList=新列表();
foreach(x.States中的状态)
{
StateDTO StateDTO=新StateDTO(state);
StateList.Add(stateDto);
}
}
但当我深入了解StateDTO时,它看起来是这样的>
public StateDTO(State x)
{
Name = x.Name;
CountryDTO Country = new CountryDTO(x.Country);
CantonList = new List<CantonDTO>();
foreach (Canton c in x.Cantons)
{
CantonDTO cantonDto = new CantonDTO(c);
CantonList.Add(cantonDto);
}
}
public StateDTO(州x)
{
Name=x.Name;
CountryDTO Country=新CountryDTO(x.Country);
CantonList=新列表();
foreach(x州的c州)
{
CantonTo CantonTo=新CantonTo(c);
CantonList.Add(CantonTo);
}
}
因为我的州应该知道他的国家的父对象,所以我有这条线
CountryDTO Country=新CountryDTO(x.Country);这就是问题所在,(可能是递归引用),这将发生在以State对象为父对象的州,等等。
因此,如何加载此父实体并避免此错误。
我需要引用父对象,如Country.Name no CountryName作为字符串
希望,我很清楚:)您可以将:
公共无效状态更改为(状态x)
公共无效状态更改为公共无效状态更改为(状态x,国家/地区更改为家长)
,然后使用状态更改为StateDTO StateDTO=newstatedto(状态,this)代码>
this
操作符反向到CountryDTO
实例,您可以将其传递给孩子们。我认为您的问题是试图在dto中反映您拥有的域模型。您最好考虑一下您在客户端真正需要什么,并使dto反映出这一点,而不是重复您在域中拥有的内容。这一点尤其正确,因为每次为服务调用提供服务时,您都在序列化一个国家/地区中所有内容的整个层次结构。在几乎所有的情况下,寄回去似乎太多了。这里有一篇很好的帖子可以更好地描述这一点: