c# - 使用 Fluent NHibernate 自动映射字典时,不考虑元素列长度

标签 c# .net nhibernate fluent-nhibernate

我正在使用 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/

相关文章:

c# - 使用正则表达式从字符串中获取子字符串

c# - 在列表框内添加一个动态文本框

sql-server - 带有加密触发器的 TooManyRowsAffectedException

c# - Count + List with Futures 不起作用

c# - 从实体中获取单列

c# - 使用 LINQ 对数字序列进行无间隙分组

c# - 在 C# 中初始化静态变量内联或静态构造函数的区别

c# - C#中的正则表达式问题

.net - Oracle 的 EF 提供程序

java - 垃圾收集器 (.net/java) 是实时系统的问题吗?