0

私は継承を作成しようとしているので、一般的なプロパティを持ついくつかのスーパークラスと、使用されるクラスであるより特殊なクラスを持つことができます。

タイプごとのテーブルやクラスごとのテーブルのようなものが必要ですhttp://www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat

だから私はここに私のスーパータイプのゲームを持っています

    public abstract class Game
{
    public virtual int Id { get; set; }
    public virtual List<UserGame> UserList { get; set; }
}

public class GameMap : ClassMap<Game>
{
    public GameMap()
    {
        Id(x => x.Id, "GameId")
            .GeneratedBy
            .HiLo("100");
        HasMany(x => x.UserList)
           .Cascade.All();
    }
}

そして、ここでの私の専門クラスQMGameActive

    public class QMGameActive : Game
{
    public virtual DateTime LastUpdate { get; set; }
    public virtual string SelectedBrick { get; set; }
    public virtual int Score { get; set; }
    public virtual string History { get; set; }
    public virtual int StartingPlayerId { get; set; }

    public QMGameActive() 
    {
        LastUpdate = DateTime.Now;
        History = "";
        SelectedBrick = "";
    }
}

public class QMGameActiveMap : SubclassMap<QMGameActive>
{
    public QMGameActiveMap()
    {
        KeyColumn("GameId");
        Map(x => x.LastUpdate);
        Map(x => x.SelectedBrick);
        Map(x => x.Score);
        Map(x => x.History);
        Map(x => x.StartingPlayerId);
    }
}

しかし、サーバーから図を取得すると、GameとQMGameActiveの間に接続がないことがわかります。

ここに画像の説明を入力してください

では、継承を使用させるために何が欠けているのでしょうか?

4

1 に答える 1

1

KeyColumn("GameId"); の場合、私はかなり確信しています。QMGameActiveMap() から、NHibernate は、Game.GameId の外部キーとなる GameID の ID 列を持つ QMGameActive を生成します。それはあなたが望むものをあなたに与えるようです。

(家から離れて申し訳ありません。確認するためにコードを試すことはできません)。

于 2012-06-26T12:50:07.630 に答える