我对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已经保留。
答案 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