gpt4 book ai didi

c# - Fluent NHibernate - 将组件/值类型对象的字典映射为 HasMany

转载 作者:行者123 更新时间:2023-11-30 12:17:53 26 4
gpt4 key购买 nike

我有一个类 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 毫无问题地被放置为字典的键。但是,它没有分配给 Rate 中的 Type 属性。

2) 我期望表 InvoiceItem_Rates 中有三列(Item_IdTypeQuantity、和 Amount。但是,Amount 可疑地不存在。

为什么会发生这些事情?我做错了什么?

最佳答案

我认为这并不完美,因为枚举键值实际上是作为整数而不是字符串存储的,但这可能不是问题。这里的关键是您不能对 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();

关于c# - Fluent NHibernate - 将组件/值类型对象的字典映射为 HasMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com