FluentNhbernate映射问题

时间:2009-12-13 01:52:42

标签: database-design oop fluent-nhibernate nhibernate-mapping

我是所有OOP和ORM的新手,所以我很感激你的帮助...

我有一个团队班:

public class Team : IEntity<Team>
{
    public virtual int ID { get; private set; }

    public virtual string Code{ get; private set; }

    public virtual TeamWorker TeamLeader { get; private set; }

    public virtual IEnumerable<TeamWorker> Workers {get; private set;}
    //etc

}

工人阶级:

public class Worker: IEntity<Worker>
{
    public virtual int ID { get; private set; }

    public virtual string Name { get; set; }
    //etc
}

团队工作者类,将工人“粘合”到将给予团队的总价值的百分比:

   public class TeamWorker
   {
        public virtual Worker Worker{ get; private set; }
        public virtual Percentage Comission{ get; private set; }
   }

并且我只需要公共十进制值属性

的百分比类

到目前为止,我能够在团队中映射领导者:

public class TeamMap : ClassMap<Team>
{

    public TeamMap()
    {
        Table("Team");

        Id(e => e.ID, "ID").GeneratedBy.Identity();

        Map(e => e.Code, "Code").Unique().Not.Nullable();

        Component(team => team.Leader,
                  m =>
                  {
                      m.References(teamWorker => teamWorker.Worker, "IDTeamWorker").Cascade.SaveUpdate();
                      m.Component(teamWorker  => teamWorker.Commission,
                                  p =>
                                  p.Map(commission=> commission.Value, "LeaderCommission").
                                      CustomType(typeof(decimal)).Nullable());
                  }
            );

  }

}

这将Leader和他的佣金映射到团队表中,我遇到的问题是映射工人......

我试过这个:

    HasMany(team => team.Workers).Table("TeamWorkers").Component(m =>
                                            {
                                                m.References(twk => twk.Worker).Cascade.SaveUpdate();
                                                m.Map(twm => twk.Commission, "Commission");
                                            }
            );

但后来我得到了这个: 无法确定类型:百分比

发生这种情况是因为委员会是一个百分比,我没有映射它,因为它是一个值对象,如果我能做到这一点:

 HasMany(team => team.Workers).Table("TeamWorkers").Component(m =>
                                            {
                                                m.References(twk => twk.Worker).Cascade.SaveUpdate();
                                                m.Component(twk => twk.Commission,
                                      m2 => m2.Map(commission=> commission.Value, "Comission").CustomType(typeof(decimal)).Nullable());
                                            }
                );

但在这种情况下,组件不是一个选项...

我需要找到一种方法

TeamWorkers表与TeamId WorkerId和Commission

TeamID和WorkerID是Team和Worker表中的外键,Commission是Percentage类中的value属性。

1 个答案:

答案 0 :(得分:0)

不要使用Component,这是值类型和处理规范化表。您需要为WorkerTeamWorker创建正确的映射,并将其视为正确的实体。

制作WorkerMapTeamWorker地图,然后您可以将TeamMap更新为仅使用HasMany(x => x.Workers)

对于Percentage,您需要使用自己的ClassMap对其进行映射,或在新的Component地图中使用TeamWorker