Как указать Columntype в беглом nHibernate? - PullRequest
3 голосов
/ 15 апреля 2010

У меня есть класс CaptionItem

public class CaptionItem
    {
        public virtual int SystemId { get; set; }
        public virtual int Version { get; set; }        
        protected internal virtual IDictionary<string, string> CaptionValues {get; private set;}
}

Я использую следующий код для отображения nHibernate

Id(x => x.SystemId);
            Version(x => x.Version);
            Cache.ReadWrite().IncludeAll();
            HasMany(x => x.CaptionValues)
                .KeyColumn("CaptionItem_Id")
                .AsMap<string>(idx => idx.Column("CaptionSet_Name"), elem => elem.Column("Text"))
                .Not.LazyLoad()
                .Cascade.Delete()
                .Table("CaptionValue")
                .Cache.ReadWrite().IncludeAll();

Таким образом, в базе данных создаются две таблицы. Один CaptionValue и другой CaptionItem. В CaptionItem таблица имеет три столбца

1. CaptionItem_Id     int
2. Text               nvarchar(255)
3. CaptionSet_Name    nvarchar(255)

Теперь мой вопрос: как я могу сделать тип columnt от Text до nvarchar(max)?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Я пробовал много вещей, но ничего не решало проблему. В конце концов я решил это. Я просто немного изменил код отображения. Новый код сопоставления приведен ниже

Id(x => x.SystemId);
            Version(x => x.Version);
            Cache.ReadWrite().IncludeAll();
            HasMany(x => x.CaptionValues)
                .KeyColumn("CaptionItem_Id")
                .AsMap<string>(idx => idx.Column("CaptionSet_Name"), elem => elem.Columns.Add("Text", c => c.Length(10000)))
                .Not.LazyLoad()
                .Cascade.Delete()
                .Table("CaptionValue")
                .Cache.ReadWrite().IncludeAll();

Итак, я только что добавил c => c.Length(10000). Теперь в базе данных тип столбца Text будет nvarchar(MAX).

Надеюсь, это кому-нибудь еще поможет.

1 голос
/ 15 апреля 2010

Вы можете сделать это, используя следующее:

Id(x => x.Text).CustomSqlType("nvarchar(max)"); 

// For older versions of Fluent NHibernate   
Id(x => x.Text).CustomSqlTypeIs("nvarchar(max)"); 

Edit:

Bipul, почему бы не создать отображение для CaptionValues, и в этом отображении указать, что тип Text равен nvarchar (max)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...