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

时间:2014-12-22 02:31:01

标签: c# asp.net nhibernate orm fluent-nhibernate

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 个答案:

答案 0 :(得分:1)

这似乎是一个NHibernate错误(参见here),然而一个流利的NHibernate贡献者在那张票中提到它实际上是Fluent NHibernate的一个问题...但它并不是已修复(见bug

你可以通过使用XML映射来解决这个问题,但是由于Fluent只生成NHibernate消耗的XML,我不确定Fluent的问题是什么(它是&#39; s通过阅读我提到的两个错误,我不清楚。

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

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

由于您的媒体资源名称与您的列名相同,因此无论如何都不需要明确设置列名。