Столбцы FluentNHibernate и VARCHAR

я начну простой проект .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.

8
задан LeftyX 5 November 2016 в 09:35
поделиться

1 ответ

Найдено решение, определяющее AnsiString как CustomType:

public class AddressMap : ComponentMap<Address>
{
    public AddressMap()
    {
        // this.Map(x => x.Number);
        this.Map(x => x.Street)
            .CustomType("AnsiString") 
            .Length(100);
        this.Map(x => x.City)
            .CustomType("AnsiString")
            .Length(30);
        this.Map(x => x.State)
            .CustomType("AnsiString")
            .Length(20);
        this.Map(x => x.PostalCode)
            .CustomType("AnsiString")
            .Length(10);
        this.Map(x => x.Country)
            .CustomType("AnsiString")
            .Length(40);
    }
}
12
ответ дан 5 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

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