私はまだ学習曲線上にあり、立ち往生しています。自動マッピングで流暢な nhibernate を使用しています。機能するいくつかの規則を構成しています(他の誰かがそれを行いました)。
私は次の構造を持っています:
LoyaltyProgram
UniversalProgram : LoyaltyProgram
OtherProgram : LoyaltyProgram
彼らは機能する階層ごとのテーブルを使用しているため、一般的な規則は問題ありません。顧客ポイントを保存するためのいくつかのルールを作成しました。
BasePointsRule
AmountPointsRule : BasePointsRule
TresholdPointsRule : BasePointsRule
BasePoints にはプロパティが含まれています
public virtual UniversalProgram UniversalProgram { get; set; }
クラス UniversalProgram で、次のことを試みました。
public virtual ICollection<AmountPointsRule> AmountPointsRules { get; set; }
public virtual ICollection<TresholdPointsRule> TresholdPointsRules { get; set; }
両方を取得して設定できるようにしたいと考えています。
識別器を設定しました。
class BasePointsRuleMap : IAutoMappingOverride<BasePointsRule>
{
public void Override(AutoMapping<BasePointsRule> mapping)
{
mapping.DiscriminateSubClassesOnColumn("basepointstype");
}
}
しかし、データベースを調べると、テーブル BasePointsRule に作成された次の外部キーがあります。
alter table `BasePointsRule`
add index (UniversalProgramId),
add constraint FK_UniversalProgram_TresholdPointsRule_TresholdPointsRules
foreign key (UniversalProgramId)
references `LoyaltyProgram` (Id)
両方のプロパティを正しいディスクリミネーターで保存しますが、フェッチ中に AmountPointsRules は BasePointsRule と TresholdPoinstRules の適切なバッグからすべてのレコードを取得しますが、AmountPoinstRules がすべてを取得したため、正しいと思われる不正なアクセスが叫ばれます。
BasePointsRuleにabstractを置くと、データベースに2つのテーブルがあり、外部キーがUniversalProgramを適切に参照しており、これは魅力のように機能します。
質問: どうにかして自動マッピングを上書きすることは可能ですか... わかりません... 2 つの制約 (Amount と Treshold に対して) またはその基本クラスに対して 1 つを設定しますか?