Свободное свойство автоматического преобразования nHibernate как nvarchar (max) - PullRequest
10 голосов
/ 20 августа 2010

, используя свободный nhibernate и autoppings (nhibernate создает мою схему БД), как я могу получить nhibernate для создания столбца nvarchar (max) в базе данных на основе следующего класса

public class VirtualPage : BaseEntity
{
    public virtual int ParentId { get; set; }
    public virtual string PageName { get; set; }
    public virtual string Title { get; set; }
    public virtual string Body { get; set; }
    public virtual string ViewName { get; set; }
    public virtual string ViewData { get; set; } // this must be nvarchar(max)
}

Ответы [ 2 ]

30 голосов
/ 27 августа 2010

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

Вы должны быть в состоянии объединить автоматическое сопоставление с явными сопоставлениями, созданными с помощью свободного API.

К счастью, это довольно простой класс для отображения (я предполагаю, что это часть иерархии таблиц на подклассы, поэтому я использую SubClassMap<> вместо ClassMap<> и не отображаю идентификатор ):

public class VirtualPageMap : SubClassMap<VirtualPage>
{
    public VirtualPageMap()
    {
        Map(x => x.ParentId);
        Map(x => x.PageName);
        Map(x => x.Title);
        Map(x => x.Body);
        Map(x => x.ViewName);
        Map(x => x.ViewData).Length(4001); // anything over 4000 is nvarchar(max)
    }
}

На самом деле я никогда не использовал autoppings, поэтому я предполагаю, что это будет правильно подобрано, но точно не знаю.

Не забудьте добавить отображение в вашу конфигурацию.

Fluently.configure(
    // blah blah blah
    .Mappings(m => 
    {
        m.FluentMappings.AddFromAssemblyOf<VirtualPage>();
        m.AutoMappings.Add( // blah blah blah
    }
2 голосов
/ 20 августа 2010

Установите для свойства Length большое значение (я использую 10000) - это заставит NHibernate сделать nvarchar (max)

...