Я запускаю простой проект .NET с FluentNhibernate .
Я следовал нескольким примерам, которые нашел в Интернете, и это довольно легко понять.
Я понял, что если я позволю FluentNhibernate построить мою схему БД (Sql Server 2000), он генерирует поля NVARCHAR для моих свойств модели строк.
Кто-то предложил мне добавить соглашение для изменения типа.
Этот бит кода прекрасно работает:
public class AnsiStringConvention : IPropertyConvention
{
private static Type stringType = typeof(string);
public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
{
if (instance.Property.PropertyType == stringType)
{
instance.CustomType("AnsiString");
}
}
}
Теперь мои поля БД - VARCHAR, как я и ожидал.
Мне нужно было добавить компонент в мой класс, следуя шаблону DDD, который я поместил адрес
в отдельном классе и добавил его в мой класс Customer.
Я создал отдельный файл сопоставления для адреса:
public class AddressMap : ComponentMap<Address>
{
public AddressMap()
{
Map(x => x.Number);
Map(x => x.Street)
.Length(100);
Map(x => x.City)
.Length(50);
Map(x => x.PostCode)
.Length(5);
}
}
Теперь все поля моей таблицы Customer являются VARCHAR, но поля компонента Address (Street, City и PostCode) по-прежнему создаются как NVARCHAR.