我的数据库中有 3 个表:
- 项目 (ID,名称)
- 标签(ID,名称)
- ProjectsTagss (id, projectId, tagid)
如您所见,ProjectsTags 表是一个桥接表
这是我流利的 nhibernate 映射
项目地图.cs:
Map(x => x.Name).Not.Nullable();
HasMany(x => x.ProjectsTags).AsBag().Inverse()
.Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
项目TagsMap.cs:
References(x => x.Project).Not.Nullable();
References(x => x.Tag).Not.Nullable();
标签映射.cs:
Map(x => x.Name).Not.Nullable();
如您所见,我在历史上没有将 Tag 表链接到其他任何内容。我现在需要生成一个报告来显示标签以及该标签的使用频率,因此我需要从标签加入到 ProjectsTag。我尝试将此行添加到标签映射中:
HasMany(x => x.ProjectsTags).AsBag().Inverse()
.Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
但是当我去更新标签对象上的名称并提交时,我收到了这个错误:
拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合
当我简单地更新标签表时,任何人都可以看到我添加的内容有什么问题会导致这个休眠异常。同样,我的目标是能够执行以下操作:
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; }
}