2

他の 2 つのテーブルを多対多の関係で結合する非常に単純なデータベース テーブルがあります。

(ほとんどの場合、ユーザーを質問に参加させます - ブックマークを考えてください)

このテーブルの NHibernate エンティティは次のようになります。

public class UserToRequestSubscription
{
    public virtual int Id{get;set;}
    public vitual int UserId{get;set;}
    public virtual int RequestId { get; set; }
    public virtual bool AcceptedByRequester { get; set; }
}

私がやりたいのは、新しいプロパティを追加することです:

    public virtual RequestForHelp Request { get; set; }

これまでのところ、これを選択で機能させることができます。私のUserToRequestSubscriptionMapping中で私は簡単に行うことができます: References(x => x.Request).

私が抱えている問題は、UserToRequestSubscriptionスローする new を挿入しようとするときです: Invalid index 6 for this SqlParameterCollection with Count=6.

このエラーを読んだところ、RequestIdプロパティを削除すると消えますが、これがないと、新しいサブスクリプションを挿入するときに DB の RequestId フィールドにデータが入力されません。

どうすればこれを行うことができますか?

ここでの私の目的は、RequestForHelpアイテムの DB への余分な呼び出しを省くことです。

マッピング クラスは次のとおりです。

public UserToRequestSubscriptionMapping()
{
      Id(x => x.Id);
      Map(x => x.UserId);
      Map(x => x.RequestId);
      Map(x => x.CreatedDate);
      Map(x => x.AcceptedByRequester);
      Map(x => x.IsActive);
      Map(x => x.DeactivatedDate);
      References(x => x.Request).Column("RequestId");
      Table("TheTable");
  }
4

1 に答える 1

2

問題は、マッピングに従って RequestId を2回参照することにあると思います。RequestIdを追加すると、プロパティは不要になると思いますRequest

public class UserToRequestSubscription
{
    public virtual int Id{get;set;}
    public vitual User User{get;set;} // you'd probably also change this, too
    public virtual RequestForHelp Request { get; set; } // changed
    public virtual bool AcceptedByRequester { get; set; }
}

public UserToRequestSubscriptionMapping()
{
    Id(x => x.Id);
    Map(x => x.CreatedDate);
    Map(x => x.AcceptedByRequester);
    Map(x => x.IsActive);
    Map(x => x.DeactivatedDate);
    References(x => x.Request).Column("RequestId");
    References(x => x.User).Column("UserId");
    Table("TheTable");
}
于 2012-06-19T09:26:48.527 に答える