我已尝试在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中的文档。
[assembly: InternalsVisibleTo("MyDomain.mapping")]
其中字符串是映射的命名空间。 protected internal virtual IList<Clinician> __AppointmentMemberAttendees { get; set; }
HasManyToMany(x => x.__AppointmentMemberAttendees)
.Table("__AppointmentToAttendeesMember")
.Cascade.None();