流畅的NHibernate非索引数据库视图的多对多关系

时间:2011-12-04 16:15:06

标签: nhibernate fluent-nhibernate

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

    public PromotionMap()
    {
        ...

        this.HasManyToMany(p =>  p.MembersCanView).Table("PromotionVisibility").Not.Cascade.SaveUpdate().ParentKeyColumn("PromotionId").ChildKeyColumn("MemberId").ReadOnly();
    }

虽然这似乎应该可以工作,但行为不是只读的,并且会话总是尝试将更改刷新回数据库视图,这显然会失败。这尤其成问题,因为视图很可能会因插入或删除操作而发生变化。

第10.2.3.3节:http://www.nhforge.org/doc/nh/en/index.html#readonly-proptypes-manytomany-bidir表明双向多对多关系无论如何都会一直刷新,这让我对如何通过加入视图来查询实体感到困惑。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

.Not仅影响布尔属性,如 Readonly LazyLoad ,而不会影响 Cascade 等多个选项。因此,您的代码指定为.Not.Readonly()

HasManyToMany(p =>  p.MembersCanView)
    .Table("PromotionVisibility")
    .Cascade.None()                      <-- None instead of .Not
    .ParentKeyColumn("PromotionId")
    .ChildKeyColumn("MemberId")
    .ReadOnly();