0

2つのエンティティクラス(自動マッピングを簡単にするための共通のインターフェイスを使用)があり、一方には他方への一般的な参照があります。

public interface IModelClass
{
  Guid Id { get; set; }
}

class Order : IModelClass
{
  public virtual Guid Id { get; set; }
  public virtual ISet<Attachment> Attachments { get; set; }
}

class Attachment : IModelClass
{
  public virtual Guid Id { get; set; }
  public virtual IModelClass AttachedTo { get; set; }
}

ジェネリックリファレンスは次のように定義できますReferencesAny

mapping.ReferencesAny(x => x.AttachedTo)
       .EntityTypeColumn("entity_type")
       .EntityIdentifierColumn("entity_id")
       .IdentityType<Guid>()
       .MetaType<string>()
       .AddMetaValue<Order>("ORDER")
       .Cascade.None();

そして、これは、アタッチメントを直接操作するだけで、横から物事をやろうとしない限り、問題なく機能しますOrder。しかし、私が欲しいのは、関係の逆をマッピングすることです。つまり、通常は次のように処理されます。

mapping.HasMany(x => x.Attachments)

たとえば、注文のコレクションに添付ファイルを追加して、各添付ファイルを手動で設定/保存しなくても永続化できるようにします(添付ファイルをコミットするには、セッションの受け渡しを開始する必要があります)。同じトランザクション)。これは機能しません。正常に機能order_idし、添付ファイルテーブルに列を作成します。

このマッピングを「機能する」ように設定する方法はありますか?

4

1 に答える 1

2
mapping.HasMany(x => x.Attachments)
    .KeyColumn("entity_id")   // to give it the right column to use
    .Where("entity_type = 'ORDER'")  // makes sure that only attachments for the order are loaded
    .Inverse()
    .Cascade.AllDeleteOrphan(); // or .Cascade.All(); if Attachments should stay without
于 2013-03-13T09:46:34.633 に答える