当前位置:  开发笔记 > 编程语言 > 正文

流畅的Nhibernate模式生成

如何解决《流畅的Nhibernate模式生成》经验,为你挑选了1个好方法。

我一直在玩FluentNhibernate作为S#arp架构的一部分.下面是一个示例映射.

public class EventBaseMap : ClassMap
{
    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,那么我可以验证.有谁知道如何做到这一点?

谢谢,



1> James Gregor..:

Fluent Configuration允许您导出XML.

你的#arch副本最近有多近,更具体地说,你知道它使用的Fluent NHibernate的修订版本是什么?

枚举类型被一个约定覆盖,该约定指定枚举应该映射为字符串,而不是使用CustomSqlTypetry CustomTypeIs().

至于列的长度,这听起来像一个bug,但它是否仍然是一个问题将取决于你正在运行的版本.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有