Fluent NHibernate非索引数据库视图上的多对多关系

Fluent NHibernate非索引数据库视图上的多对多关系,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个数据库视图,它连接多个表,以根据成员ID选择多个实体的可见性,由于其复杂性,成员ID显然是不可索引的。因此,我需要的是能够根据成员Id从这些实体中进行选择。我使用一个以视图作为映射表的集合,尝试了多对多关系: public PromotionMap() { ... this.HasManyToMany(p => p.MembersCanView).Table("PromotionVisibility").Not.Cascade.S

我有一个数据库视图,它连接多个表,以根据成员ID选择多个实体的可见性,由于其复杂性,成员ID显然是不可索引的。因此,我需要的是能够根据成员Id从这些实体中进行选择。我使用一个以视图作为映射表的集合,尝试了多对多关系:

    public PromotionMap()
    {
        ...

        this.HasManyToMany(p =>  p.MembersCanView).Table("PromotionVisibility").Not.Cascade.SaveUpdate().ParentKeyColumn("PromotionId").ChildKeyColumn("MemberId").ReadOnly();
    }
虽然这看起来应该是可行的,但该行为不是只读的,会话总是试图将更改刷新回数据库视图,这显然是失败的。这尤其有问题,因为视图很有可能因插入或删除操作而更改

这里的第10.2.3.3节:建议无论发生什么情况,双向多对多关系都将保持一致,因此我有点困惑于如何通过连接视图来查询实体


有什么想法吗?

。Not
只影响只读、懒散加载等布尔属性,而不影响级联等多项选择。因此,您的代码指定了
.Not.Readonly()

HasManyToMany(p=>p.MembersCanView)
.表格(“促销可视性”)

.Cascade.None()。因此,您的代码指定了
.Not.Readonly()

HasManyToMany(p=>p.MembersCanView)
.表格(“促销可视性”)

.Cascade.None()谢谢,这似乎成功了。我发现它仍在尝试级联删除,但我也通过颠倒关系来阻止它。谢谢,这似乎成功了。我发现它仍在尝试级联删除,但我也能通过颠倒关系来阻止它。
HasManyToMany(p =>  p.MembersCanView)
    .Table("PromotionVisibility")
    .Cascade.None()                      <-- None instead of .Not
    .ParentKeyColumn("PromotionId")
    .ChildKeyColumn("MemberId")
    .ReadOnly();