标签: nhibernate-cascade

在插入之前强制NHibernate级联删除

我有一个父对象,它与一个ISet子对象有一对多的关系.子对象具有唯一约束(PageNum以及ContentID- 父对象的外键).

<set name="Pages" inverse="true" cascade="all-delete-orphan" access="field.camelcase-underscore">
    <key column="ContentId" />
    <one-to-many class="DeveloperFusion.Domain.Entities.ContentPage, DeveloperFusion.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</set>
Run Code Online (Sandbox Code Playgroud)

我打的问题是,如果我删除ContentPage从父集合元素,然后添加与同一事务中相同的唯一密钥一个新的...你得到一个违反唯一约束,因为NHibernate的尝试执行插入之前的删除.

有没有办法强制NHibernate首先执行删除?

nhibernate nhibernate-mapping nhibernate-cascade

22
推荐指数
1
解决办法
9002
查看次数

多对多:删除一方,关系条目但不删除另一方

我想删除具有许多用户组的用户,但这些用户组不属于该用户:其他用户也可以使用此用户组.即使没有用户引用用户组,也可以存在用户组.

我想映射多对多关系,这样如果用户被删除,关系会自动删除不是用户组

我试过,Cascade.All因为我认为多对多的级联会影响关系但不会影响另一方.我以为只会Cascade.AllDeleteOrphan删除其他人.显然我错了.

似乎我不理解级联规则.有人可以向我提供明确的解释,也许也可以达到我的目标吗?

谢谢

nhibernate many-to-many cascade nhibernate-cascade

13
推荐指数
1
解决办法
3952
查看次数

NHibernate Cascade =保存更新"?

免责声明:我是一名NHibernate noobie,所以希望这个问题有道理.我有两个类之间的多对多关系,比如......

public class Entity1
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity2> Entity2List;
} 

Public class Entity2
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity1> Entity1List;
}
Run Code Online (Sandbox Code Playgroud)

我在两个类映射中都添加了一个多对多关系,定义了一个关联表但不确定要使用哪个级联选项.我希望能够创建一个新的Entity1实例,将新的Entity2实例添加到它的列表中,调用Save,并将两者都插入到数据库中(反之亦然).删除实体时,它应删除与子实体的任何关联,但不删除子实体本身.我应该使用cascade ="save-update"吗?

c# nhibernate nhibernate-cascade

12
推荐指数
1
解决办法
1万
查看次数

级联错误:已删除的对象将通过级联重新保存

我有一个NHibernate实现的项目并使用Lazy Loading.我在这个项目中有两个班:人和家庭.这两者之间的关系是聚合,是指Person有一个Person列表.映射是:

  <class name="Person" table="Person_Person" >

    <id name="Id" type="Int64" unsaved-value="0">
      <generator class="native" />
    </id>

    <bag name="Families" inverse="true" table="Person_Family" cascade="all-delete-orphan" >
      <key column="Person_id_fk"/>
      <one-to-many class="Domain.Entities.Family,Domain.Entities"/>
    </bag>

  </class>
Run Code Online (Sandbox Code Playgroud)

在这个项目中,我通过ID获取一个人然后删除一个家庭的人.

Person person = SessionInstance.Get<Person>(id);
foreach (Family fam in person.Families)
    if (fam.Name == "Jaun")
        SessionInstance.Delete(fam);
Run Code Online (Sandbox Code Playgroud)

系列未删除,因为通过此消息抛出异常: deleted object would be re-saved by cascade (remove deleted object from associations)[Domain.Entities.Family#167]

我怎样才能删除一个人的家庭?

c# nhibernate cascade nhibernate-mapping nhibernate-cascade

9
推荐指数
1
解决办法
5753
查看次数

带有级联删除的NHibernate Has-Many集合失败

目标:
创建一个父子关系,以便修改父项的子项列表将传播给所有子项,并让NHibernate完成繁重的任务.父子关系将Has-Many在自引用表上.

问题:
任何删除父(根)对象的尝试都会导致异常,而不是删除子对象的预期行为.

我正在使用的东西的版本:
Microsoft SQL Server Management Studio版本10.0.4064.0
FluentNHibernate版本1.3
NHibernate版本3.2.0.4

下面是我用来复制此行为的当前类对象和表结构的集合.


// Entity
class Task
{
    ID { get; set; }    
    public virtual IList<Task> Children { get; set; }
    public virtual byte[] Version { get; protected set; }
    public virtual bool IsNew() { return ID <= 0; }

    public Task()
    {
        this.Children = new System.Collections.Generic.List<Task>();
    }
    // Other properties excluded for brevity
}
Run Code Online (Sandbox Code Playgroud)
// Map
class TaskMap : ClassMap<Task>
{
    TaskMap()
    {
        Table("Task");

        Id(x => x.ID, …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate orm fluent-nhibernate nhibernate-cascade

8
推荐指数
1
解决办法
2016
查看次数

如何删除多对多的关系?

我有很多关系:

产品有很多类别,类别有很多产品.

说我有

Shopping Category  
Food Category

Product A - Shopping Category, Food Category  
Product B - Shopping Category
Run Code Online (Sandbox Code Playgroud)

现在我删除Shopping Category.我希望Product A删除引用Shopping Category,我想Product B完全删除.

我最终会:

Product A - Food Category.
Run Code Online (Sandbox Code Playgroud)

我如何在nhibernate中执行此操作(我使用流利的nhibernate).

我尝试使用Cascade DeleteOrphan,AllDeleteOrphan但当我这样做并删除购物时,产品A和B都被删除了.

public class CategoryMapping : ClassMap<Category>
{
    public CategoryMapping()
    {
        Id(x => x.Id).GeneratedBy.GuidComb();

        Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
        HasManyToMany(x => x.Products).Cascade.DeleteOrphan();
    }
}


public class ProductMapping : ClassMap<Product>
{
    public ProductMapping()
    {
        Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
        HasManyToMany(x …
Run Code Online (Sandbox Code Playgroud)

nhibernate many-to-many fluent-nhibernate nhibernate-cascade cascading-deletes

5
推荐指数
1
解决办法
2201
查看次数

NHibernate Cascade在清除集合时删除子项

我搜索了很多地方,仍然无法找到我正在寻找的答案.

我正在使用NHibernate 3.2 - 按代码映射

我有以下映射文件:

public class ParentMapping: EntityMapping<Parent>
{
        public ParentMapping()
        {
            Set(x => x.Children, map =>
                                           {
                                               map.Cascade(Cascade.All);
                                               map.Inverse(true);
                                           }, r => r.OneToMany());
        }
}

public class ChildMapping: JoinedSubclassMapping<Child> // This is a subclass of something else.
{
        public RequiredSkillMapping()
        {
            ManyToOne(x => x.Parent, map => { map.NotNullable(true); });
        }
}
Run Code Online (Sandbox Code Playgroud)

级联保存工作正常.

session.Save(parent) will save the children and associate them correctly.
Run Code Online (Sandbox Code Playgroud)

当我试着打电话时:

var parent = session.Get<Parent>(1);
parent.Children.Clear();

session.Save(parent); or session.SaveOrUpdate(parent) or session.Update(parent)
Run Code Online (Sandbox Code Playgroud)

实体保持与父母相关联.

我通过调用它来工作:

foreach(var child in …
Run Code Online (Sandbox Code Playgroud)

nhibernate cascade nhibernate-mapping nhibernate-cascade

4
推荐指数
1
解决办法
6078
查看次数

NHibernate级联保存

这是尝试在Comment.BlogArticleID中插入null.

出现以下GenericADOException:"无法插入:[NHibernate__OneToMany.BO.Comment] [SQL:INSERT INTO注释(名称)VALUES(?);选择SCOPE_IDENTITY()]"

出现以下内部异常:"无法将值NULL插入列'BlogArticleID',表'Relationships_Test_OneToMany.dbo.Comment';列不允许空值.INSERT失败.\ r \n语句已终止."

我需要一个单向映射.提供的答案还在谈论双向映射.

NHibernate级联保存是否适用于本机ID生成器?

数据库表:

BlogArticle {ID,Name},如果是ID,则Identitity = true.

注释{ID,Name,BlogArticleID},如果是ID,则Identitity = true.

Comment.hbm.xml

<hibernate-mapping
  xmlns="urn:nhibernate-mapping-2.2"
  assembly="NHibernate__OneToMany.BO"
  namespace="NHibernate__OneToMany.BO"
  default-access="property">

  <class name="Comment" table="Comment">
    <id name="ID">
      <generator class="native" />
    </id>

    <property name="Name" />
  </class>
</hibernate-mapping>

public class Comment
    {
        private int _id;
        public virtual int ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public Comment()
        {
        }

        public Comment(string name)
        {
            this._name = name;
        }

        private string _name;
        public virtual string …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-cascade

2
推荐指数
1
解决办法
3540
查看次数