Pergunta

Eu tenho jogado sobre com FluentNHibernate como parte do S # arp Architecture. Abaixo está um exemplo de mapeamento.

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();
    }
}

Eu, então, usar a geração de esquema Nhibernate para a saída meu ddl para um arquivo.

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);

Até aí tudo bem. No entanto, o DDL gerado para esta tabela não corresponde e, na verdade, contém um erro.

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)
)
  • O Estado Enum é representado como uma string, embora eu tentei forçá-lo a usar INT
  • O comprimento número de telefone não corresponde ao mapeamento.

Eu queria saber como eu vou sobre depuração isso. É este um problema com o mapeamento em FluentNH ou é um problema com o gerador de esquema. Se eu pudesse emitir o xml produzido então eu poderia verificar. Alguém sabe como fazer isso?

Obrigado,

Foi útil?

Solução

Fluente Configuração permite exportar o XML.

Como recente é a sua cópia do #arch, e mais especificamente, você sabe o que revisão da Fluent NHibernate ele está usando?

A enumeração é tipo está a ser substituído por uma convenção que especifica enumerações deve ser mapeada como cordas, em vez de usar tentativa CustomSqlType apenas usando CustomTypeIs<int>().

Como para o comprimento das colunas, que soa como um bug, mas se ele ainda é um problema vai depender de qual versão você está executando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top