2

列挙型であり、複合キーの一部であるプロパティのマッピングは、int から文字列に変更されたようで、元に戻す方法はありません。

私はこのデータクラスを持っています:

public class Table5
{
    public virtual int Value { get; set; }

    public virtual Level Level { get; set; }

    public virtual string Name { get; set; }

    // Equality operators omitted
}

public enum Level
{
    Hi,
    Lo
}

このマッピングで:

public class Table5Map : ClassMap<Table5>
{
    public Table5Map()
    {
        Table("Table5");

        CompositeId()
            .KeyProperty(x => x.Value)
            .KeyProperty(x => x.Level);

        Map(x => x.Name);
    }
}

データベースの「レベル」列は整数です。

これは以前は機能していましたが、彼のバージョンの Fluent では、文字列 "Hi" と "Lo" を Level 列に書き込もうとします。

強制的に整数にマップするにはどうすればよいですか?

4

2 に答える 2

4

最も簡単な方法は、キー プロパティの Type を設定するだけです。

CompositeId()
    .KeyProperty(x => x.Value)
    .KeyProperty(x => x.Level, m => m.Type(typeof(int)));

FNH は、デフォルトで列挙型を常に文字列としてマップします。逆に、composite-id 内の enum は、FNH1.0 ではデフォルトで int にマップされました。おそらく、上位バージョンでのこのような不一致を修正するために変更されました。

于 2011-04-05T20:52:26.720 に答える
2

マッピングにこの変更を試してください。

/// snip ///
 CompositeId()
    .KeyProperty(x => x.Value)
    .KeyProperty(x => x.Level, c => c.ColumnName("Level").Type(typeof(Level)));
/// snip ///

この「トリック」は、多くの複合キーを持つレガシーデータベースを処理する必要がある場合に役立ちました。キー以外のプロパティに相当する「トリック」が必要な場合は、ここで受け入れられた回答を確認してください。幸運を祈ります。すべてのデータベースが常に「レガシー」であるとは限りません。

于 2011-04-05T20:52:08.017 に答える