我有一个班级,Item
有很多Rates
。它们由枚举RateType
键入。
public class Item
{
int Id {get;set;}
IDictionary<RateType, Rate> Rates {get;set;}
// some other stuff
}
public class Rate
{
RateType Type {get;set;}
decimal Amount {get;set;}
decimal Quantity {get;set;}
}
我正在覆盖我的映射:
public void Override(FluentNHibernate.Automapping.AutoMapping<Item> mapping)
{
mapping.HasMany(x => x.Rates)
.AsMap(x => x.Type)
.KeyColumns.Add("Item_Id")
.Table("InvoiceItem_Rates")
.Component(x => x.Map(r => r.Amount))
.Component(x => x.Map(r => r.Quantity))
.Cascade.AllDeleteOrphan()
.Access.Property();
}
这有两个问题。
1)当我获取一个项目时,Type
被放置为词典的键而没有问题。但是,它未分配给Type
中的Rate
属性。
2)我期待表InvoiceItem_Rates
(Item_Id
,Type
,Quantity
和Amount
中有三列。但{{1}怀疑地缺席了。
为什么会发生这些事情?我做错了什么?
答案 0 :(得分:3)
这在我看来并不完美,因为枚举键值实际上存储为整数而不是字符串,但可能不是问题。 这里的关键是你不能对Component进行多次调用,因为它会覆盖你之前的Component调用,无论最后一个是什么。 调用Component()的正确方法如下:
Id(x => x.Id);
HasMany(x => x.Rates)
.AsMap(x => x.Type)
.KeyColumn("Item_Id")
.Table("InvoiceItem_Rates")
.Component(x =>
{
x.Map(r => r.Amount);
x.Map(r => r.Quantity);
})
.Cascade.AllDeleteOrphan();