如何在Fluent-NHibernate中级联插入父、子和组合列表

本文关键字:组合 列表 插入 Fluent-NHibernate 级联 | 更新日期: 2023-09-27 18:04:50

我使用SQLite,我有这三个表:

User (Id, Name) Project (Id, Name) ProjectUser (UserId, ProjectId)

但是在我的映射中,我只有两个ClassMaps: UserMap映射用户和ProjectMap映射项目

在我的模型中,UserProject的列表,ProjectUser的列表,一个many-to-many relationship

如何创建一个新的用户实例,项目的新实例,在用户的ProjectList中添加项目,并插入所有(用户,项目和userproject),当我session.Save(NewUser) ?

这是我的实际映射,这是倒置的列ProjectIdUserId数据库:

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();

如何在Fluent-NHibernate中级联插入父、子和组合列表

我注意到你正在命名你的列(ParentKeyColumnChildKeyColumn)。如果你只是命名你的表并调用Inverse()Cascade.All(),它会像你想要的那样工作,因为fluent nhibernate会创建这两个列并自己管理。

ProjectMap中,你可以这样做:

HasManyToMany(x => x.UserList).Table("TBPROJECTUSER").Inverse();

UserMap,你可以这样做:

HasManyToMany(x => x.ProjectList).Table("TBPROJECTUSER").Cascade.All();