データベースに 3 つのテーブルがあります。
- プロジェクト (ID、名前)
- タグ(id、名前)
- ProjectsTagss (id、projectId、tagid)
ご覧のとおり、ProjectsTags テーブルはブリッジ テーブルです。
これが私の流暢なnhibernateマッピングです
ProjectMap.cs:
Map(x => x.Name).Not.Nullable();
HasMany(x => x.ProjectsTags).AsBag().Inverse()
.Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
ProjectsTagsMap.cs:
References(x => x.Project).Not.Nullable();
References(x => x.Tag).Not.Nullable();
TagMap.cs:
Map(x => x.Name).Not.Nullable();
ご覧のとおり、これまでタグ テーブルを他のものにリンクしていませんでした。タグとそのタグが使用される頻度を示すレポートを生成する必要があるため、タグから ProjectsTag に結合する必要があります。この行をタグマップに追加してみました:
HasMany(x => x.ProjectsTags).AsBag().Inverse()
.Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
しかし、タグ オブジェクトの名前を更新してコミットすると、次のエラーが発生します。
cascade="all-delete-orphan" を持つコレクションは、所有エンティティ インスタンスによって参照されなくなりました
タグテーブルを更新するだけで、この nhibernate 例外を引き起こす可能性のある、追加したものに問題があることを誰かが見ることができますか? 繰り返しますが、私の目標は次のようなことができるようにすることです:
Tag.ProjectTags.Count();
要求された追加のコードを次に示します。
私のタグクラス:
public class Tag
{
public virtual IList<ProjectTag> ProjectTags { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}