6

私のデータベースにはAssignmentWorkplaceというテーブルがあり、概念的には、すべての割り当ては正確に 1 つの職場で行われます。Assignmentテーブルには、 WorkplaceテーブルのWorkplaceName列を参照する外部キーである列Workplaceが含まれています。

これはスキーマです:

table Workplace (
  ID int primary key,
  WorkplaceName int
)

table Assignment (
  Workplace int
)

そして私のマッピング:

class Workplace
{
  public virtual int ID { get; set; }
  public virtual int WorkplaceName { get; set; }
} 

class Assignment 
{
  public virtual Workplace { get; set; }
}

class AssignmentMap : ClassMap<Assignment>
{
  public AssignmentMap()
  {
    References(a => a.Workplace);
  }
}

実行時に例外が発生します

指定された識別子を持つ行が存在しません[MyProject.Workplace#2001]

ここでの問題は、FH がテーブルの主キーであるWorkplace.ID列のAssignment.Workplaceプロパティの値を探すことです。正しい場所はWorkplace.WorkplaceName列です。この方法でWorkplaceNameを指定できると考えて、メソッドを使用しようとしました。正しい列を結合する方法を FH に伝えるにはどうすればよいですか?ForeignName

4

2 に答える 2

2

ここで答えを見つけました: FluentNHibernate Many-To-One References where Foreign Key is not to Primary Key and column names are different

解決策は使用することでしたPropertyRef; 行は次のようになります。

References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join();

私が気付いていなかったのは、サーバー側の列WorkplaceNameを使用するようにマッピングに指示するのではなく、クライアント側のオブジェクトのプロパティWorkplaceNameへの参照を与える必要があるということでした。

于 2012-11-16T12:24:20.010 に答える
0

私はそれが次のようなものでなければならないと思います

References(x => x.Workplace).Column("WorkplaceName")

于 2012-11-16T11:06:10.813 に答える