簡體   English   中英

流利的NHibernate復合ID長度設置不正確

[英]Fluent NHibernate Composite Id Length set incorrectly

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的錯誤(請參閱此處 ),但是Fluent NHibernate的貢獻者在該票證中提到這實際上是Fluent NHibernate的問題...但尚未解決(請參見此錯誤

您也許可以通過使用XML映射來解決問題,但是由於Fluent只是生成NHibernate消耗的XML,所以我不確定Fluent可能會出什么問題(閱讀這兩個bug尚不清楚。我已經提到過)。

好消息是,如果排除ColumnName選項,則看起來映射是正確的:

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

由於屬性名稱與列名稱相同,因此無論如何都不需要顯式設置列名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM