0

Unityを介してデータソース(Navision)に緩くバインドされた大規模なシステムがあります。それを交換して、独自のデータベースを作成する機会を得ています。

ですから、私たちは周りを見回して、Fluent NHibernateの外観を本当に気に入っています。概念実証を取得し、いくつかのサービスを交換しようとしています。

NHibernates HiLoアルゴリズムを使用したい-残念ながら、Navisionから文字列IDを継承しました。これはIDのプレフィックス(例COL00001)であるため、インターフェイスに一致させるには、文字列IDを使用する必要があります。

誰かが私がどのように何かを得るのか知っていますか...

Id(x => x.ID).GeneratedBy.HiLo("100");

IDが文字列である場合に機能しますか?現在、IDはint、longなどである必要があります

ありがとう、

アンディ

- - - アップデート - - -

提案された記事の例を試しましたが、この機能はFluent NHibernateの新しいバージョンから削除されました-ただし、.Customがあります-しかし、それを機能させることができないようです!

public class ManufacturerMap : ClassMap<Manufacturer>
{
    public ManufacturerMap()
    {
        Id(x => x.ID).GeneratedBy.Custom(typeof(StringTableHiLoGenerator));
        Map(x => x.Name);
    }
}


public class StringTableHiLoGenerator : TableHiLoGenerator
{
    public override object Generate(ISessionImplementor session, object obj)
    {
        return base.Generate(session, obj).ToString();
    }
}
4

3 に答える 3

5

最後にそれをクラックしました...あなたの援助に感謝します-誰かが興味を持っている場合の解決策はここにあります...

注:ConfigureメソッドでITypeは、をベースに渡す必要があることに注意してくださいint

public class ManufacturerMap : ClassMap<Manufacturer>
{
    public ManufacturerMap()
    {
        Id(x => x.ID).GeneratedBy.Custom<StringTableHiLoGenerator>(a => a.AddParam("max_lo", Nexus3General.HiLoGeneratorMaxLoSize.ToString()));
        Map(x => x.Name);
    }
}

public class StringTableHiLoGenerator : TableHiLoGenerator
{
    public override object Generate(ISessionImplementor session, object obj)
    {
        return base.Generate(session, obj).ToString();
    }

    public override void Configure(IType type, System.Collections.Generic.IDictionary<string, string> parms, NHibernate.Dialect.Dialect dialect)
    {
        base.Configure(NHibernateUtil.Int32, parms, dialect);
    }
}
于 2009-11-05T16:07:23.013 に答える
4

標準のHiLoジェネレーターを文字列で動作させることができるとは思いません。カスタムIDジェネレーター(文字列を含むヒロの場合もあります)の作成を見てみましょう。

http://nhforge.org/wikis/howtonh/creating-a-custom-id-generator-for-nhibernate.aspx

あなたの更新に関する更新

流暢なウィキでこれに関する適切なドキュメントを見つけることができません。ただし、使用しているメソッドではなく、この一般的なメソッドを試すことができます。

Id(x => x.Id).GeneratedBy.Custom<IdentityGenerator>()

それは動作しますか?そうでない場合は、流暢で平凡なメーリングリストに投稿すると、最も迅速な対応が得られると思います。

http://groups.google.com/group/fluent-nhibernate

于 2009-11-04T14:50:26.757 に答える
0

投稿された回答は、カスタムIDジェネレーターの主キーとして文字列があり、Nhiberateが「typeはValueTypeTypeパラメーター名ではありません:type」というエラーをスローした場合にも機能しました。

于 2015-01-21T09:12:10.457 に答える