gpt4 book ai didi

c# - nhibernate "cascade="all-delete-orphan”错误

转载 作者:可可西里 更新时间:2023-11-01 08:34:52 25 4
gpt4 key购买 nike

我的数据库中有 3 个表:

  1. 项目(身份证、姓名)
  2. 标签(id、名称)
  3. 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();

如您所见,我一直没有将 Tag 表链接到任何其他内容。我现在需要生成一份报告来显示 Tag 以及该标签的使用频率,因此我需要从 Tag 加入 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; }
}

最佳答案

在代码中的某处,您应该取消引用项目域中的原始集合。我怀疑您的代码是这样的:

var project = Session.Get<Project>();
project.ProjectsTags = new List<ProjectsTags> { someProjectsTagsInstance };
Session.Save(project);

如果是这种情况,您应该改为这样做:

var project = Session.Get<Project>();
project.ProjectsTags.Clear();
project.ProjectsTags.Add(someProjectsTagsInstance);
Session.Save(project);

关于c# - nhibernate "cascade="all-delete-orphan”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com