C# 如何从单个源代码生成“并行”数据对象?

C# 如何从单个源代码生成“并行”数据对象?,c#,nhibernate,semantics,semantic-markup,C#,Nhibernate,Semantics,Semantic Markup,我有一组实体,它们反映了我的应用程序中的数据流。同样的数据如下所示: 1.fluent-nHibernate映射 2.数据库访问对象 3.在服务器端创建类似于干净数据的实体 4.DTO对象,即实体加上一些附加字段,用于客户机-服务器交互 这些都必须支持相同的字段集A,并且我还必须在DAO和实体以及DTO和实体之间设置自动映射。正如你所见,这是一个手动复制粘贴很多。是否有任何软件可以帮助从字段列表中自动生成许多类似的对象 我使用C.如果每个层之间确实有一组公共属性,那么可以将它们放在一个公共分母基

我有一组实体,它们反映了我的应用程序中的数据流。同样的数据如下所示: 1.fluent-nHibernate映射 2.数据库访问对象 3.在服务器端创建类似于干净数据的实体 4.DTO对象,即实体加上一些附加字段,用于客户机-服务器交互

这些都必须支持相同的字段集A,并且我还必须在DAO和实体以及DTO和实体之间设置自动映射。正如你所见,这是一个手动复制粘贴很多。是否有任何软件可以帮助从字段列表中自动生成许多类似的对象


我使用C.

如果每个层之间确实有一组公共属性,那么可以将它们放在一个公共分母基类型上,该类型将由流中的每个对象扩展

如果另一方面,每一层将略有但可预测地不同,请考虑编写一个LIQPAD脚本,以根据其中一个层生成其他三层所需的代码。LinqPad对于这类工作是一个很好的选择,因为您不必处理解析;在生成其他层时,可以简单地使用反射来检查包含其中一个层的已编译程序集

不过,我还是建议您尽量减少正在处理的层的数量。例如,对于第4层,您可以简单地使用包含而不是复制粘贴来添加附加属性吗?例如:

public class CustomerDto { 
    public CustomeEntity Entity { get; set; } 
    public int SomeProp { get; set; }
}
我对NHibernate不太熟悉,但是你真的需要1和2的不同类型吗

另一种方法是关注单个特性需要处理的数据,而不是为数据库中的每个表创建一整套类。这样,您就可以编写一个LINQ查询,直接从数据进入实际使用的类型

在理论上,向应用程序添加层通常看起来不错,但在实践中,我发现它通常无法提供很多抽象,同时增加了大量的编码开销