Fluent Nhibernate-Schema Generation
Ich Spiele seit etwa mit FluentNhibernate als Teil des S#arp-Architektur. Unten ist ein Beispiel-mapping.
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();
}
}
Dann benutze ich die Nhibernate-schema-Generierung zum Ausgang meiner ddl in eine Datei.
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);
So weit So gut. Jedoch sind die generierten ddl-Code für diese Tabelle nicht übereinstimmen, und tatsächlich einen Fehler enthält.
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)
)
- Die Enum Zustand wird als Zeichenfolge dargestellt, obwohl ich versuchte es zu zwingen, mit INT
- Die Telefonnummer, die Länge entspricht nicht der Zuordnung.
Ich Frage mich, wie ich das Debuggen dieser. Ist das ein problem mit dem mapping in FluentNH oder ist es ein problem mit der schema-generator. Wenn ich könnte die Ausgabe der erstellten xml-Datei, dann könnte ich überprüfen. Weiß jemand, wie dies zu tun?
Dank,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fließend Konfiguration ermöglicht Ihnen den export der XML.
Wie aktuell ist Ihre Kopie von #Bogen, und genauer gesagt, wissen Sie, was die überarbeitung der Fluent-NHibernate benutzt?
Den enum-Typ überschrieben werden, indem eine Konvention, die angibt, Enumerationen zugeordnet werden soll, als String, anstatt
CustomSqlType
versuchen nur mitCustomTypeIs<int>()
.Als für die Länge der Spalten, das klingt wie ein bug, aber ob es noch eine Ausgabe hängt davon ab, welche version Sie ausführen.