如何在Fluent NHibernate中映射受保护的集合?

时间:2009-07-15 04:00:12

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

我已尝试在Fluent中使用Reveal属性,但我无法使用集合进行编译。我希望实体中的一个集合受到保护,除了在实体本身之外的任何地方都无法访问。这可能吗?感谢

编辑:

这是我正在尝试使用的代码,

HasMany<Trip>(x => Reveal.Property<Trip>("_trips"));

我也尝试过这段代码,

HasMany<Trip>(Reveal.Property<Organization>("_trips"));

每次我的应用程序运行时,NHibernate都说它无法映射到“Property”或者它会抛出一个未知的异常。

2 个答案:

答案 0 :(得分:8)

假设组织有 IList &lt; Trip&gt;

HasMany<Trip>(Reveal.Property<Organization>("_trips"));

代码应该工作。 检查它是一个属性,并且你有受保护的getter和setter(privates将不起作用,因为NHibernate将希望代理该集合进行延迟加载)。

答案 1 :(得分:0)

最简单的答案是允许映射受保护的内部虚拟属性。这是NHibernate Fluent documentation中的文档。

  1. 转到您的 AssemblyInfo.cs (位于“属性”下)文件,并添加以下内容:[assembly: InternalsVisibleTo("MyDomain.mapping")],其中字符串是映射的命名空间。
  2. 使用受受保护的内部虚拟访问声明创建属性。

        protected internal virtual IList<Clinician> __AppointmentMemberAttendees { get; set; }
    
  3. 像平常一样映射项目。

        HasManyToMany(x => x.__AppointmentMemberAttendees)
               .Table("__AppointmentToAttendeesMember")
               .Cascade.None();