"Entity"라는 기본 클래스와 기본 클래스 "Entity"를 상속하고 WCF REST 응용 프로그램의 Fluent NHibernate와 매핑되는 "Project", "Company", "Contact"라는 하위 클래스가 있습니다.Fluent NHibernate Polymorphism and TransformUsing
이전에는 엔티티 클래스에서이 다형성 연관을 필요로하지 않았지만 최근에는이 클래스를 many to many 관계와 연관시켜야하므로이 작업을 결정했습니다.
public crmEntityMap()
{
Table("crmEntity");
LazyLoad();
Id(x => x.ID).GeneratedBy.Identity().Column("ID");
Map(x => x.instanceID).Not.Nullable().Column("InstanceID");
Map(x => x.comment).Column("Comment").Length(500);
HasManyToMany(x => x.RelatedEntities)
.AsList(i => i.Column("`Index`"))
.ParentKeyColumn("ParentID")
.ChildKeyColumn("ChildID")
.BatchSize(100)
.Not
.LazyLoad()
.Fetch.Join()
.Cascade.None();
DiscriminateSubClassesOnColumn("Type");
}
프로젝트 매핑 : 내 WCF REST 서비스에 직렬화
public class crmProjectMap : SubclassMap<crmProject>
{
public crmProjectMap() {
Table("crmProjects");
LazyLoad();
Map(x => x.name).Column("Name").Length(50);
Map(x => x.initialDate).Column("InitialDate");
Map(x => x.deadline).Column("Deadline");
Map(x => x.isClosed).Column("IsClosed");
References(x => x.assignedToUser).Column("AssignedToUserID").NotFound.Ignore();
}
}
변환 코드 : 이것은 내 기본 클래스의 매핑
public static DTO.Project GetProject(int projectId, int instanceId)
{
crmUser user = null;
return Provider.GetSession().QueryOver<crmProject>()
.Fetch(x => x.assignedToUser).Eager()
.JoinAlias(x => x.assignedToUser,() => user, JoinType.LeftOuterJoin)
.Where(c => c.ID == projectId)
.And(c => c.instanceID == instanceId)
.Select(Projections.ProjectionList()
.Add(Projections.Property("ID"), "ID")
.Add(Projections.Property("instanceID"), "instanceID")
.Add(Projections.Property("name"), "name")
.Add(Projections.Property("comment"), "comment")
.Add(Projections.Property("isClosed"), "isClosed")
.Add(Projections.Property("initialDate"), "initialDate")
.Add(Projections.Property("deadline"), "deadline")
.Add(Projections.Property(() => user.userID), "assignedToUserID")
//Add Related Entities?
).TransformUsing(Transformers.AliasToBean<DTO.Project>())
.SingleOrDefault<DTO.Project>();
}
그러나 당신이 볼 수 있듯이 나는 필요 여기에 RelatedEntities를 추가하는 방법을 모르지만 RelatedEntity는 Entity 클래스를 상속하는 "Company", "Contact"또는 "Project"가 될 수 있기 때문에이를 수행하는 방법을 모르겠습니다. DTO.Project 클래스에서이를 정의하고 데이터를이 클래스로 변환해야합니다.