Свободная генерация схемы ниберната - PullRequest
4 голосов
/ 13 марта 2009

Я играл с 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, то мог бы проверить. Кто-нибудь знает, как это сделать?

Спасибо

1 Ответ

7 голосов
/ 14 марта 2009

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

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

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

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

...