我正在使用SQLite,并且具有以下三个表:
User (Id, Name) Project (Id, Name) ProjectUser (UserId, ProjectId)
但是在我的映射中,我只有两个ClassMap:UserMap
映射User和ProjectMap
Map Project。
在我的模型User
有一个列表Project
,并Project
有一个列表User
,一个many-to-many relationship
。
我该如何创建User的新实例,Project的新实例,将项目添加到user的ProjectList中,并在插入时插入所有(用户,项目和userproject)session.Save(NewUser)
?
它是我的实际映射,它反转列ProjectId
和UserId
数据库:
PS:
我试图反转父/子列名称的顺序,并尝试删除或放入Inverse()
所有组合,有时会出现此错误:Abort due to constraint violation\r\nforeign key constraint failed
还有一次,我遇到了相同的问题,即要反转列。
我尝试使用我自己的代理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();
我注意到您正在命名您的列(ParentKeyColumn
和ChildKeyColumn
)。如果您只是命名表并调用Inverse()
或Cascade.All()
,则可以使用它,因为流利的nhibernate会创建两个列并自己进行管理,因此它将按您的意愿工作。
在ProjectMap上,您可以执行以下操作:
HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").Inverse();
在您的UserMap上,您可以执行以下操作:
HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").Cascade.All();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句