nhibernate - 流畅的 Nhibernate 模式生成

标签 nhibernate fluent-nhibernate ddl s#arp-architecture

我一直在使用 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)
)
  • 即使我试图强制它使用 INT
  • ,枚举状态也被表示为一个字符串。
  • 电话号码长度与映射不匹配。

  • 我想知道我如何调试这个。这是 FluentNH 中的映射问题还是模式生成器的问题。如果我可以输出生成的 xml,那么我可以验证。有谁知道如何做到这一点?

    谢谢,

    最佳答案

    Fluent Configuration允许您导出 XML。

    您的#arch 副本有多近,更具体地说,您是否知道它使用的是 Fluent NHibernate 的哪个版本?

    枚举类型被一个约定覆盖,该约定指定枚举应映射为字符串,而不是使用 CustomSqlType尝试只使用 CustomTypeIs<int>() .

    至于列的长度,这听起来像是一个错误,但它是否仍然是一个问题将取决于您运行的版本。

    关于nhibernate - 流畅的 Nhibernate 模式生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644496/

    相关文章:

    nhibernate - Fluent Nhibernate 和自定义集合

    oracle - ORA-14300 分区键映射到最大允许分区数之外的分区”

    nhibernate - 有没有办法使用 NHibernate session 来确定是否需要将更改写入数据库?

    Nhibernate - 如何摆脱不需要的文本转换

    sql-server - 使用 Fluent nHibernate 将 SQL Server 时间戳列自动映射到字节 []

    sql - 如果不存在则删除表空间

    maven - 使用 Hibernate4/JPA 2.1 在 MAVEN 构建中生成 DDL 脚本

    unit-testing - 使用 SQLite "No Such Table"测试 NHibernate - 生成了模式

    c# - NHibernate Session.Evict()

    nhibernate - 缓存 Fluent NHibernate ISessionFactory