私は2つのテーブルを持っています。私は、各ユーザーがどの项目にもフラグを立てることができるようにしたい。明示的なIDを持たない単純な関係を格納する
ここでは、集合論的観点から、これをユーザーとアイテムの単純な関係として保存するのが妥当であるはずです。この新しいテーブルUserItemFlagsを呼び出します。テーブルには2つの列があります。 1つはUserテーブルへの外部キー、もう1つはItemテーブルへの外部キーです。ユーザーUがアイテムIにフラグを付けると、これはUserItemFlagsテーブルの行(U, I)
の存在によって表されます。
Fluent-NHibernateでこれを表現する際の私の問題は次のとおりです。Id
マッピングをどうすればいいのか分かりません。理想的には、ユーザーとアイテムの間にこの関係が存在するかどうかよりも何もないため、IDはありません。このモデルの自然な結果は、テーブルに重複する行を持つことは不可能だということです。これは望ましい機能です。
using FluentNHibernate.Mapping;
public class UserItemFlagsMapping : ClassMap<UserItemFlags>
{
public UserItemFlagsMapping()
{
// Aaaa! I must have an Id!
References(x => x.User).Not.Nullable();
References(x => x.Item).Not.Nullable();
}
}
この特定のケースではFluentを放棄する必要がある場合でも、正しい方向のポインタがあればうれしいです。
Fluent-NHibernateは同意しないFluentが理解できるように、 'ClassMap <...>'の 'Id'メソッドを呼び出す必要があります。 –
Id()メソッドは、単一列の主キーのみを対象としています。 KeyReference(x => x.Item、 "item_id";もちろん、もしあなたがCompositeId()を使っていたら、CompositeId()デフォルトのコンベンションマッピングを使用しています列名が必要です。 – Rich