C# 如何在Fluent NHibernate中级联插入父项、子项和组合列表
我使用的是SQLite,我有以下三个表:C# 如何在Fluent NHibernate中级联插入父项、子项和组合列表,c#,sqlite,nhibernate,fluent-nhibernate,C#,Sqlite,Nhibernate,Fluent Nhibernate,我使用的是SQLite,我有以下三个表: 用户(Id、名称) 项目(Id、名称) ProjectUser(UserId,ProjectId) 但在我的映射中,我只有两个类映射:UserMap映射用户和ProjectMap映射项目 在我的机型中,用户有一个项目列表,项目有一个用户列表,一个多对多关系 如何创建新的用户实例、新的项目实例、将项目添加到用户的项目列表中以及在我会话时插入所有(用户、项目和用户项目)。保存(新用户) 它实际上是my映射,它将数据库上的ProjectId和UserId列反转
用户(Id、名称)
项目(Id、名称)
ProjectUser(UserId,ProjectId)
但在我的映射中,我只有两个类映射:UserMap
映射用户和ProjectMap
映射项目
在我的机型中,用户
有一个项目
列表,项目
有一个用户
列表,一个多对多关系
如何创建新的用户实例、新的项目实例、将项目添加到用户的项目列表中以及在我会话时插入所有(用户、项目和用户项目)。保存(新用户)
它实际上是my映射,它将数据库上的ProjectId
和UserId
列反转为:
p.S:
- 我尝试颠倒父/子列名称的顺序,并尝试
在所有组合中删除或放置
,有时我 出现此错误:Inverse()
,还有一次我也遇到了同样的问题 将柱倒置由于约束冲突而中止\r\n保留密钥 约束失败了
- 我尝试在每个连接打开后使用自己的代理执行
PRAGMA foreign_keys=ON
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();
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();
USERMAP
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();
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将创建两个列并自行管理
在项目地图上,您可以执行以下操作:
HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").Inverse();
HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").Cascade.All();
在您的用户地图上,您可以执行以下操作:
HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").Inverse();
HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").Cascade.All();