Fluent NHibernate Composite Id 长度设置不正确

Posted

技术标签:

【中文标题】Fluent NHibernate Composite Id 长度设置不正确【英文标题】:Fluent NHibernate Composite Id Length set incorrectly 【发布时间】:2014-12-22 02:31:00 【问题描述】:

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)

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

您也许可以通过使用 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();
    );

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

【讨论】:

谢谢,今天试试看:)

以上是关于Fluent NHibernate Composite Id 长度设置不正确的主要内容,如果未能解决你的问题,请参考以下文章

用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?

Fluent NHibernate and Mysql,SQLite

Fluent NHibernate - NHibernate.QueryException:无法解析属性

Fluent Nhibernate and Stored Procedures

Fluent 映射和 NHibernate Xml 配置

Castle Windsor 3 + Fluent NHibernate + Castle.NHibernate.Integration