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