我正在使用 FluentNHibernate 映射字典,如下所示:
HasMany<MyEntity>(n => n.MyDictionary)
.AsMap<string>(
index => index.Column("LCID").Type<int>(),
element => element.Column("Value").Type<string>().Length(1000)
.Cascade.AllDeleteOrphan();
如您所见,我为元素列“值”指定了列长度。
但是,指定的元素列长度不受尊重;当我查看导出的数据库架构(我从映射生成数据库)时,元素列被映射为 nvarchar(255)
。
生成的 HBM 似乎是正确的:
<map table="MyDictionary_Values" name="MyDictionary" mutable="true"
cascade="all-delete-orphan">
<key>
<column name="MyDictionary_id"/>
</key>
<index type="int">
<column name="LCID"/>
</index>
<element type="string" length="1000">
<column name="Value"/>
</element>
</map>
这是不正确的 DDL:
create table MyDictionary_Values
(
MyDictionary_Id INT not null,
Value NVARCHAR(255) null,
LCID INT not null,
primary key (MyDictionary_Id, LCID)
)
这是 NHibernate 中的错误还是我做错了什么?
最佳答案
使用此演练:
HasMany<MyEntity>(n => n.MyDictionary)
.AsMap<string>(
index => index.Column("LCID").Type<int>(),
element => element.Columns.Clear().Columns.Add("Value", col => col.Length(1000))
.Cascade.AllDeleteOrphan();
关于c# - 使用 Fluent NHibernate 自动映射字典时,不考虑元素列长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890346/