0

次のことを達成するために、エンティティ マッピングを構造化する方法を見つけようとしています。

public class Document
{
    public virtual string Name { get; set; }
    // Other properties
    public IList<Document> RelatedDocuments { get; set; }
}

関連する の ID ペアを持つ関係テーブルが必要Documentです。

現在、私はこのSOの質問で説明されている解決策でこの問題に取り組んでいます: Fluent Nhibernate mapping related items (OPの名前が私のものと同じであるという偶然の一致)。

RelatedTo関連項目の単一のリストが必要であり、 用と用に 1 つずつ持つ必要はありませんRelatedFrom。それは可能ですか?


明確にするために、私が解決しようとしている問題は、ドキュメント A をドキュメント B に関連付ける場合、ドキュメント A のRelatedDocumentsリストにドキュメント B を含める必要があり、ドキュメント B のRelatedDocumentsリストにドキュメント A を含める必要があることです。関係

4

1 に答える 1

1

次のようなことを試してください:

class Document
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Document> Related { get; set; }

    public void RelateTo(Document other) 
    {
      this.Related.Add(other);
      other.Related.Add(this);
    }
}

class DocumentMap : FluentNHibernate.Mapping.ClassMap<Document>
{
    public DocumentMap()
    {
        Table("Documents");
        Id(x => x.Id);
        Map(x => x.Name);
        HasManyToMany(x => x.Related)
            .Table("DocumentRelations")
            .ParentKeyColumn("DocumentId")
            .ChildKeyColumn("RelatedDocumentId");
    }
}

DocumentRelationsテーブルは、 に関連付けられていることを指定する関連付けテーブルRelatedDocumentIdですDocumentId。テーブルは次のようになります。

create table Documents
(
  Id int identity primary key clustered,
  Name varchar(100)
)

create table DocumentRelations
(
 DocumentId int,
 RelatedDocumentId int,
 primary key clustered (DocumentId,RelatedDocumentId)
)

リレーションシップ自体に関連付けられたデータが必要かどうかを検討する必要があります。その場合、関連コレクションは、関連ドキュメントをプロパティとして持つ RelatedDocument インスタンスのコレクションになり、マッピングは HasMany になります。

于 2012-08-28T23:51:57.573 に答える