【问题标题】:Fluent NHibernate Composite Id Length set incorrectlyFluent NHibernate Composite Id 长度设置不正确
【发布时间】: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)

有什么想法吗?

【问题讨论】:

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


    【解决方案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();
        });
    

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

    【讨论】:

    • 谢谢,今天试试看:)
    猜你喜欢
    • 2013-12-19
    • 2011-04-10
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多