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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Fluent NHibernate中映射受保护的集合?相关的知识,希望对你有一定的参考价值。

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

编辑:

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

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

我也尝试过这段代码,

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

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

答案

假设组织有一个IList <Trip>

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

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

另一答案

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

  1. 转到AssemblyInfo.cs(在Properties下)文件并添加以下内容:[assembly: InternalsVisibleTo("MyDomain.mapping")]其中字符串是映射的命名空间。
  2. 使用受保护的内部虚拟访问声明创建属性。 protected internal virtual IList<Clinician> __AppointmentMemberAttendees { get; set; }
  3. 像往常一样映射项目。 HasManyToMany(x => x.__AppointmentMemberAttendees) .Table("__AppointmentToAttendeesMember") .Cascade.None();

以上是关于如何在Fluent NHibernate中映射受保护的集合?的主要内容,如果未能解决你的问题,请参考以下文章

Fluent nHibernate - 如何在联结表上映射非键列?

Fluent NHibernate:如何将整个类映射为只读?

如何在 Fluent NHibernate 中创建基实体和基类映射

Fluent NHibernate:如何创建一对多的双向映射?

使用 Fluent NHibernate 映射泛型类

使用自动映射时如何使用 Fluent NHibernate Validator?