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

发布于 2024-11-05 07:00:17 字数 1117 浏览 3 评论 0原文

我正在使用 FluentNHibernate 映射字典,如下所示:

HasMany<MyEntity>(n => n.MyDictionary)
    .AsMap<string>(
        index => index.Column("LCID").Type<int>(),
        element => element.Column("Value").Type<string>().Length(1000)
    .Cascade.AllDeleteOrphan();

如您所见,我为元素列“Value”指定列长度。

但是,不考虑指定的元素列长度;当我查看导出的数据库架构(我从映射生成数据库)时,元素列被映射为 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 中的错误还是我做错了什么?

I'm mapping a dictionary using FluentNHibernate like this:

HasMany<MyEntity>(n => n.MyDictionary)
    .AsMap<string>(
        index => index.Column("LCID").Type<int>(),
        element => element.Column("Value").Type<string>().Length(1000)
    .Cascade.AllDeleteOrphan();

As you can see, I'm specifying a column length for the element column 'Value'.

However, the specified element column length isn't respected; when I look at the exported database schema (I'm generating the database from my mappings) the element column is mapped as nvarchar(255).

The generated HBM seems to be correct:

<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>

Here's the incorrect DDL:

create table MyDictionary_Values
(
    MyDictionary_Id INT not null,

    Value NVARCHAR(255) null,

    LCID INT not null,
    primary key (MyDictionary_Id, LCID)
)

Is this a bug in NHibernate or am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国粹 2024-11-12 07:00:17

使用此演练:

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();

Use this walkthrough :

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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文