Свободное свойство автоматического сопоставления nHibernate как nvarchar (max)

с использованием свободного nhibernate и автоматических приложений (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)
}
11
задан stoic 20 August 2010 в 15:19
поделиться

2 ответа

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

У вас должна быть возможность комбинировать автоматическое сопоставление с явным сопоставлением, созданным с помощью Fluent 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)
    }
}

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

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

Fluently.configure(
    // blah blah blah
    .Mappings(m => 
    {
        m.FluentMappings.AddFromAssemblyOf<VirtualPage>();
        m.AutoMappings.Add( // blah blah blah
    }
31
ответ дан 3 December 2019 в 02:19
поделиться

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

2
ответ дан 3 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: