NHibernate には長い間問題があり、最適ではない方法/回避策で解決しました。
まず、クライアント アプリケーションとの通信に WCF REST を使用しています。ご存知のように、永続化されたエンティティをシリアル化することはベスト プラクティスではなく、常に他の問題を引き起こします。したがって、私は常に NHibernates Transformer を使用してエンティティを DTO にマップします。問題は、トランスフォーマーを使用して変換するのがより複雑なエンティティがあることです。
トランスフォーマーまたはその他の nhibernate 機能を使用して、サブエンティティをサブ dto にマップするにはどうすればよいですか?
注: Automapperのようなサードパーティを使用したくありません。
これらは、マップしたいエンティティと DTO です。変数名はまったく同じです。
エンティティ クラス:
エンティティ タイプ
public class crmEntityType : EntityModel<crmEntityType>
{
public crmEntityType()
{
Association = new List<crmEntityType>();
Fields = new List<crmCustomField>();
}
public virtual int ID { get; set; }
public virtual string Title { get; set; }
public virtual ICollection<crmEntityType> Associations { get; set; }
public virtual ICollection<crmCustomField> Fields { get; set; }
}
カスタムフィールド
public class crmCustomField : EntityModel<crmCustomField>
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual crmEntityType EntityType { get; set; }
}
DTO
EntityTypeDTO
[DataContract]
public class EntityTypeDTO
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public IList<CustomFieldDTO> Fields { get; set; }
[DataMember]
public int[] Associations { get; set; }
}
カスタムフィールドDTO
[DataContract]
public class CustomFieldDTO
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int EntityType { get; set; }
[DataMember]
public int FieldType { get; set; }
}