gpt4 book ai didi

nhibernate - FluentNhibernate IDictionary

转载 作者:行者123 更新时间:2023-12-03 11:23:29 26 4
gpt4 key购买 nike

我有一个 IDictionary<StocksLocation,decimal> 的映射属性,这是映射:

    HasMany<StocksLocation>(mq => mq.StocksLocation)
.KeyColumn("IDProduct")
.AsEntityMap("IDLocation")
.Element("Quantity", qt => qt.Type<decimal>());

现在我从 decimal 改变了到值对象: Quantity .
Quantity有两个属性,十进制 ValueUnit单位(其中 Unit 是一个枚举)。

我现在必须映射 IDictionary<StocksLocation,Quantity> ,我怎样才能做到这一点?

提前致谢

最佳答案

选项 1:将其映射为实体

我猜你的 table 看起来像这样:

CREATE TABLE Quantity (
ID int NOT NULL,
IDProduct int NOT NULL,
IDLocation int NOT NULL,
Value decimal(18,2) NOT NULL,
Unit int NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (IDProduct) REFERENCES Product (ID),
FOREIGN KEY (IDLocation) REFERENCES StocksLocation (ID),
UNIQUE KEY (IDProduct, IDLocation)
);

继续 map Quantity作为实体类:
public class QuantityMap : ClassMap<Quantity>
{
public QuantityMap()
{
Id(x => x.Id);
References(x => x.Product, "IDProduct");
References(x => x.Location, "IDLocation");
Map(x => x.Value);
Map(x => x.Unit);
}
}

...然后更改 Product.StocksLocation映射到:
HasMany<StocksLocation, Quantity>(mq => mq.StocksLocation)
.KeyColumn("IDProduct")
.AsMap(x => x.Location);

选项 2:将其映射为组件

因为你评论说你宁愿不映射 Quantity作为一个实体,让我们考虑如何将其映射为一个组件。 Product.StocksLocation 的 *.hbm.xml 映射字典看起来像这样:
<map name="StocksLocation" table="Quantity">
<key column="IDProduct" />
<index-many-to-many column="IDLocation" class="YourNamespace.StocksLocation, YourAssembly" />
<composite-element class="YourNamespace.Quantity, YourAssembly">
<property name="Unit" type="YourNamespace.Unit, YourAssembly" />
<property name="Value" type="System.Decimal, mscorlib" />
</composite-element>
</map>

我们如何使用 FluentNHibernate 做到这一点?据我所知,在后备箱中没有这样做的方法,所以你有几个选择:
  • Gabriel Schenker实现了 HasManyComponent方法。他有一个指向他的项目的源代码的链接,但我不知道该源代码是否包括他对 FluentNHibernate 所做的更改。
  • 如果他的更改源不可用,请随时对 FluentNHibernate 进行自己的修改,并通过 Github 将它们提交回社区。
  • 如果这听起来太麻烦了,当所有其他方法都失败时,FluentNHibernate 有一个最终的后备方案。它允许您混合和匹配各种映射方法。自动映射你的一些类,写 ClassMap类,并为任何不能用 FluentNHibernate 映射的类编写 *.hbm.xml 文件。
  • 关于nhibernate - FluentNhibernate IDictionary<Entity,ValueObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424180/

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