NHibernate write value = NULL when ID < 0

2019-07-27 22:13发布

问题:

We would like to implement a simple rule in which NHibernate would assign (persist) NULL to the database when the ID for the entity is equal to -1. For example, we have an "in system" account which should be persisted to the database as NULL.

If we try to persist the ID of -1 to the database we get a Foreign key exception because the ID does not exist in the foreign table.

We are using NHibernate with FluentNhibernate.

回答1:

I think you didn't a proper mapping of your entity. If it were correct, you should made any trick: you should not see an ID, but a reference to another entity, and in this case you will persist the reference with a null value. Even in the wrong case you want map the entity with a reference expressed as an ID ( that is almost always wrong ) if this id is nullable, map it as a nullable so you have int? and you can fit null to mean null, instead of the -1 trick.

See Comments

If a custom entity is internally used as a null value, a session interceptor could help: working on the OnSave and treat the special case by replacing the dummy entity with null. Here you can find the documentation about NH interceptors. At the 11.2 chaper od the same doc there is the portion related to events, equivalents for this kind of problem.