我是所有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属性。
答案 0 :(得分:0)
不要使用Component
,这是值类型和处理规范化表。您需要为Worker
和TeamWorker
创建正确的映射,并将其视为正确的实体。
制作WorkerMap
和TeamWorker
地图,然后您可以将TeamMap
更新为仅使用HasMany(x => x.Workers)
。
对于Percentage
,您需要使用自己的ClassMap
对其进行映射,或在新的Component
地图中使用TeamWorker
。