流畅的 NHibernate 复合 ID 长度设置不正确

本文关键字:设置 不正确 ID 复合 NHibernate | 更新日期: 2023-09-27 18:34:50

Fluent NHibernate错误地设置了我的列长度。

我做错了什么?

public class ResourceEntryMap : ClassMap<ResourceEntry>
{
    public ResourceEntryMap ()
    {
        CompositeId ()
            .KeyProperty (x => x.Culture, set => {
            set.ColumnName ("Culture");
            set.Length (10);
            set.Access.Property ();
        })
            .KeyProperty (x => x.Name, set => {
            set.ColumnName ("Name");
            set.Length (100);
            set.Access.Property ();
        });
        Map (x => x.Type).Column ("Type").Length (20);
        Map (x => x.Value).Column ("Value").Length (4000).Not.Nullable ();
        Table ("ResourceEntry");
    }
}

当它创建表时,我得到这个

culture character varying(255) NOT NULL,
name character varying(255) NOT NULL,
type character varying(20),
value character varying(4000) NOT NULL,
CONSTRAINT resourceentry_pkey PRIMARY KEY (culture, name)

有什么想法吗?

流畅的 NHibernate 复合 ID 长度设置不正确

这似乎是一个NHibernate错误(见这里(,但是Fluent NHibernate的贡献者在该票证中提到,这实际上是Fluent NHibernate的问题。但它尚未修复(请参阅此错误(

您可以通过使用 XML 映射来解决此问题,但由于 Fluent 只是生成 NHibernate 使用的 XML,因此我不确定 Fluent 的问题可能是什么(阅读我提到的两个错误对我来说不清楚(。

好消息是,如果排除ColumnName选项,则映射看起来是正确的:

CompositeId ()
   .KeyProperty(x => x.Culture, set => {
        set.Length(10);
        set.Access.Property();
    })
   .KeyProperty(x => x.Name, set => {
        set.Length(100);
        set.Access.Property();
    });

由于属性名称与列名称相同,因此无需显式设置列名称。