作为 S#arp 架构的一部分,我一直在使用 FluentNhibernate。下面是一个示例映射。
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)
)
- 即使我试图强制它使用 INT,枚举状态也表示为字符串
- 电话号码长度与映射不匹配。
我想知道如何进行调试。这是 FluentNH 中的映射问题还是模式生成器的问题。如果我可以输出生成的 xml,那么我可以验证。有谁知道如何做到这一点?
谢谢,