NHibernate: Unable to resolve property: _Property

This issue occurred when

  • There are two entities, same class, same table, different entity names.
  • Both entities have one-to-many relationship to a child table
  • Both one-to-many relationships specify the foreign key column as not-null=”true”
  • Try to call Session.Merge on one entity, with additional new child entities inside.

After trying random configurations, somehow removing not-null=”true” from one entity hbm mapping solves this issue.

No idea why, the only way is, perhaps, to debug NHibernate code.

Update in Jan 2021: Seems that setting inverse = “true” to one of the entities will solve the problem

For inverse = “true” in NHibernate, refer to this link: https://mkyong.com/hibernate/inverse-true-example-and-explanation/

It’s also possible to fix this issue by setting up both one-to-many and many-to-one relationships between 2 entities.

NHibernate, Unable to resolve property _Namespace

This bug was reported and fixed before in earlier versions of NH( https://nhibernate.jira.com/browse/NH-3234 ), but for some reason it resurfaced and hasn’t been fixed since (https://nhibernate.jira.com/browse/NH-3886)

This happens when

  • There is a one-to-many relationship between Parent and Child with cascading.
  • A child has a many-to-one reference to parent in .hbm.xml mapping file.
  • A transient entity of Parent has new transient entities of Child
  • Performing Session.Merge(parent)

The error thrown is in the format: Unable to resolve property: _Namespace. Where namespace is the first part of your namespace in the project.

Somehow removing the many-to-one configuration from the Child entity hbm.xml file will stop NHibernate from throwing this error.

Hopefully it will be fixed in the future versions of NH.

How to save time in implementing a new feature

Recently I have found that I could have been more efficient than how I was doing, my approach of diving straight into the code to implement the feature and then keep refining later works, but takes quite some time.

The problem is, every time I make a change, I have to test to make sure it doesn’t break anything, this caused me to test multiple times as I experimented to make my solution work. I have found that it would save more time if I do all the implementation first, then test.

It would save more time if I write down a list of test cases and mark each as done after I have tested. So I won’t forget what I have tested and can be sure that those cases work.

Also, if possible, write unit tests so tests can be executed automatically quickly in place of manual testing.

So I came up with the following flow, maybe it will be faster.

Connect from host to VM in VirtualBox and allow Internet in VM

In order to do this, setup 2 network adapters for the VM, first one use NAT so the VM has access to the Internet through the host.

The second adapter is set to Host-only.

in the VM, run ipconfig and use the IP address of the VM under the host-only network to access from the host.

Use the default gateway to access host from inside the VM

API Reference for NHibernate

While trying to figure out how a method in NHibernate works, I looked for the API Reference and couldn’t find it.

Turns out, NHibernate is a port of Hibernate for .NET framework, so you can find all the API reference in Hibernate API reference.

At least they could have included a link on their website, this probably wasted a lot of everyone’s time.