- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将一个简单的工作演示从 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/
我一直在尝试让 NHibernate ICompositeUserType 映射工作。但是我一直在尝试使实现足够通用以用于不同的表。 我们的遗留数据库有许多包含纬度和经度的表,我想将它们作为 Posi
我正在将一个简单的工作演示从 nhibernate 移植到 Fluent。我现有的 nhibernate 映射是这样的:
我有一个域模型对象,它具有 System.DateTimeOffset 类型的属性。我使用的数据库本身不支持这种类型,因此我计划使用“datetime”类型的列和“smallint”类型的列来存储它。
我是一名优秀的程序员,十分优秀!