с использованием свободного 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)
}
С помощью автоматического сопоставления вы можете переопределить длину по умолчанию для текстовых полей, но она будет применяться ко всем текстовым полям.
У вас должна быть возможность комбинировать автоматическое сопоставление с явным сопоставлением, созданным с помощью 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
}
Установите для свойства Length большое число (я использую 10000) - это заставит NHibernate создать nvarchar (max)