如何在Fluent-NHibernate中级联插入父、子和组合列表
本文关键字:组合 列表 插入 Fluent-NHibernate 级联 | 更新日期: 2023-09-27 18:04:50
我使用SQLite,我有这三个表:
User (Id, Name)
Project (Id, Name)
ProjectUser (UserId, ProjectId)
但是在我的映射中,我只有两个ClassMaps: UserMap
映射用户和ProjectMap
映射项目
在我的模型中,User
有Project
的列表,Project
有User
的列表,一个many-to-many relationship
。
如何创建一个新的用户实例,项目的新实例,在用户的ProjectList中添加项目,并插入所有(用户,项目和userproject),当我session.Save(NewUser)
?
这是我的实际映射,这是倒置的列ProjectId
和UserId
数据库:
p。S:
-
我试过颠倒父/子列名称的顺序,并尝试过删除或把
Inverse()
在所有的组合,有时我已经得到这个错误:Abort due to constraint violation'r'nforeign key constraint failed
和另一次我有同样的问题 -
我已经尝试使用我自己的代理在每个连接打开后执行
PRAGMA foreign_keys = ON
。
PROJECTMAP
Table("TBPROJECT");
Id(x => x.Id);
Map(x => x.ProjectName).Length(100).Not.Nullable();
Map(x => x.TeamProjectURL).Length(100).Not.Nullable();
HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").ParentKeyColumn("UserId").ChildKeyColumn("ProjectId").Inverse();
USERMAP
Table("TBUSER");
Id(x => x.Id);
Map(x => x.FullName).Length(100).Not.Nullable();
Map(x => x.Username).Length(100).Not.Nullable();
Map(x => x.Email).Length(100).Not.Nullable();
Map(x => x.Password).Length(100).Nullable();
Map(x => x.Department).Length(100).Nullable();
HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").ParentKeyColumn("UserId").ChildKeyColumn("ProjectId").Cascade.All();
我注意到你正在命名你的列(ParentKeyColumn
和ChildKeyColumn
)。如果你只是命名你的表并调用Inverse()
或Cascade.All()
,它会像你想要的那样工作,因为fluent nhibernate会创建这两个列并自己管理。
在ProjectMap中,你可以这样做:
HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").Inverse();
和UserMap,你可以这样做:
HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").Cascade.All();