流畅的NHibernate和Migrator问题与CRUD操作

时间:2018-09-18 16:05:43

标签: c# .net nhibernate fluent

我对CRUD操作存在三个问题

我的课程:

public class A 
{
 public virtual int Id { gry; set;} 
 public virtual string Text { gry; set;} 
 public virtual IList<B> Bs { gry; set;} 
}    

public class B 
{
 public virtual int Id { gry; set;} 
 public virtual string Text { gry; set;} 
 public virtual A A { get; set; }
 public virtual C C { gry; set; } 
}    

public class C
{
 public virtual int Id { gry; set; } 
 public virtual string Something { gry; set; } 
}  

我使用Fluent NHibernate和Fluent Migrator。

我对这些工具的正确配置有疑问。当我想将一个新对象保存到数据库中时,我必须以适当的顺序执行保存操作-首先在对象C上,然后将它们放置在B类的对象中,然后才将创建的元素添加到该类的变量列表中A,我保存它们。

我只想将A类的对象保存到数据库以及他孩子的老虎机中。从数据库中删除时,我也有同样的问题。 我使用AllDeleteOrphan级联创建了自己的HasManyConvention类,但没有帮助。我在补丁中添加了使用Rule.Cascade在Fluent Migrator中在Fluent Migrator中在数据库中创建表B的功能,并且如果直接删除A类的对象,B也会从数据库中删除,但是C已经保留。

1 个答案:

答案 0 :(得分:0)

导航属性并未明确描述对象之间的关系。我认为根据当前的导航属性保存C甚至是不可能的,而当前的导航属性不能用于定义流畅的映射。您可以在类C中添加属性B,然后尝试以下操作:

我假设您在A和B之间有一个OneToMany(许多B指向一个A),在B和C之间有一个OneToOne(一个C指向一个B)。

“ A”映射:

  HasMany(x => x.Bs).Inverse().Cascade.AllDeleteOrphan();

“ B”映射​​:

  References(x => x.A);
  HasOne(x => x.C).Cascade().All();

'C'映射:

    //nothing