gpt4 book ai didi

c# - 如何映射 ICompositeUserType

转载 作者:太空狗 更新时间:2023-10-30 00:53:18 25 4
gpt4 key购买 nike

我正在将一个简单的工作演示从 nhibernate 移植到 Fluent。我现有的 nhibernate 映射是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MoneyHibernate"
namespace="MoneyHibernate">

<class name="Invoice" table="Invoices">
<id name="Id">
<generator class="guid"/>
</id>
<property name="Number"/>
<property name="Customer"/>
<property name="TotalValue" type="MoneyHibernate.MoneyCompositeUserType,MoneyHibernate">
<column name="TotalValue_Amount" not-null="true" />
<column name="TotalValue_Currency" length="3" not-null="true" />
</property>

</class>

</hibernate-mapping>

我已经尝试创建 equlivilant ClassMap:

internal class InvoiceMap : ClassMap<Invoice>
{
public InvoiceMap()
{
Id(x => x.Id);
Map(x => x.Customer);
Map(x => x.Number);
Map(x => x.TotalValue)
.CustomType(typeof (MoneyCompositeUserType))
.Column("TotalValue_Amount")
.Column("TotalValue_Currency");
}
}

但是我得到了错误:

---> NHibernate.MappingException: property mapping has wrong number of columns: MoneyHibernate.Invoice.TotalValue type: MoneyHibernate.MoneyCompositeUserType

所以我认为声明列两次不是正确的方法?

最佳答案

您这样做是正确的,但是,您需要在像这样手动声明列之前将 Columns.Clear() 添加到您的映射中:

Map(x => x.TotalValue)
.CustomType(typeof (MoneyCompositeUserType))
.Columns.Clear()
.Columns.Add("TotalValue_Amount", "TotalValue_Amount");

否则,nHibernate 将在您的复合用户类型映射的列集合中附加新的列名(因此出现错误的列数异常)。

关于c# - 如何映射 ICompositeUserType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935161/

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