Вопрос

Я экспериментировал с FluentNhibernate как частью архитектуры S#arp.Ниже приведен пример сопоставления.

public class EventBaseMap : ClassMap<EventBase>
{
    public EventBaseMap()
    {
        WithTable("Event_Header");
        //NotLazyLoaded(); 

        Id(x => x.Id).WithUnsavedValue(-1).GeneratedBy.Native();

        Map(x => x.Name).WithLengthOf(50).Not.Nullable();
        Map(x => x.Description).WithLengthOf(255);
        Map(x => x.Rating);
        Map(x => x.Price);
        Map(x => x.PhoneNumber).WithLengthOf(20).Not.Nullable();
        Map(x => x.EmailAddress);
        Map(x => x.Website);
        Map(x => x.State).Not.Nullable().CustomSqlTypeIs("INT");

        Component(x => x.Ages, m =>
         {
             m.Map(x => x.From).TheColumnNameIs("AgeFrom");
             m.Map(x => x.To).TheColumnNameIs("AgeTo");
         });

        HasMany(x => x.Calendar).AsBag();

        HasManyToMany(x => x.Tags)
            .WithTableName("Event_Tags")
            .WithParentKeyColumn("EventId")
            .WithChildKeyColumn("TagId").AsBag();
    }
}

Затем я использую генерацию схемы Nhibernate для вывода моего ddl в файл.

FileInfo t = new FileInfo(Server.MapPath("~/bin/MyDDL.sql"));
        StreamWriter writer = t.CreateText();

        new SchemaExport(cfg).Execute(true, false, false, true, NHibernateSession.Current.Connection, writer);

Все идет нормально.Однако сгенерированный ddl для этой таблицы не соответствует и фактически содержит ошибку.

create table Event_Header (
   Id INT IDENTITY NOT NULL,
   EmailAddress NVARCHAR(255) null,
   PhoneNumber NVARCHAR(255) null,
   State string null,
   Website NVARCHAR(255) null,
   Description NVARCHAR(255) null,
   Name NVARCHAR(255) null,
   Price DECIMAL(19,5) null,
   Rating INT null,
   AgeTo INT null,
   AgeFrom INT null,
   primary key (Id)
)
  • Состояние Enum представлено в виде строки, хотя я пытался заставить его использовать INT.
  • Длина номера телефона не соответствует сопоставлению.

Мне было интересно, как мне это отладить.Это проблема с отображением в FluentNH или проблема с генератором схемы.Если бы я мог вывести созданный XML, я мог бы проверить.Кто-нибудь знает как это сделать?

Спасибо,

Это было полезно?

Решение

Свободная конфигурация позволяет экспортировать XML.

Насколько свежа ваша копия #arch, а точнее, знаете ли вы, какую версию Fluent NHibernate она использует?

Тип перечисления переопределяется соглашением, которое определяет, что перечисления должны отображаться как строки, а не использовать CustomSqlType попробуйте просто использовать CustomTypeIs<int>().

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top