Domanda

Ho giocato con FluentNhibernate come parte dell'architettura S # arp. Di seguito è riportato un esempio di mappatura.

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

Uso quindi la generazione dello schema Nhibernate per generare il mio ddl in un file.

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

Finora tutto bene. Tuttavia, il ddl generato per questa tabella non corrisponde e in realtà contiene un errore.

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)
)
  • Lo stato Enum è rappresentato come una stringa anche se ho provato a forzarlo a utilizzare INT
  • La lunghezza del numero di telefono non corrisponde alla mappatura.

Mi chiedevo come posso fare per eseguire il debug di questo. È un problema con la mappatura in FluentNH o è un problema con il generatore di schemi? Se potessi produrre l'xml prodotto, allora potrei verificare. Qualcuno sa come farlo?

Grazie,

È stato utile?

Soluzione

Configurazione fluida consente di esportare l'XML.

Quanto è recente la tua copia di #arch e, più specificamente, sai quale revisione di Fluent NHibernate sta utilizzando?

Il tipo enum viene sovrascritto da una convenzione che specifica che gli enum devono essere mappati come stringhe, invece di usare CustomSqlType prova solo usando CustomTypeIs<int>().

Per quanto riguarda la lunghezza delle colonne, sembra un bug, ma se è ancora un problema dipenderà dalla versione in esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top