4

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)
)
  • Enum State は、強制的に INT を使用しようとしたにもかかわらず、文字列として表されます
  • 電話番号の長さがマッピングと一致しません。

これをどのようにデバッグするのだろうと思っていました。これは FluentNH のマッピングの問題ですか、それともスキーマ ジェネレーターの問題ですか。生成されたxmlを出力できれば、検証できます。誰もこれを行う方法を知っていますか?

ありがとう、

4

1 に答える 1

8

Fluent Configurationを使用すると、XML をエクスポートできます。

あなたの #arch のコピーはどれくらい新しいものですか?具体的には、それが使用している Fluent NHibernate のリビジョンを知っていますか?

列挙型は、CustomSqlType単に try を使用するのではなく、列挙型を文字列としてマップする必要があることを指定する規則によってオーバーライドされていますCustomTypeIs<int>()

列の長さに関しては、バグのように聞こえますが、それでも問題があるかどうかは、実行しているバージョンによって異なります。

于 2009-03-13T22:35:51.357 に答える