views:

30

answers:

2

Hi,

I have a Date class which wraps over the DateTime? class (aids in mocking DateTime.Now, our domain ,etc).

The Date class class only has one protected property : DateTime? date

public class Date
{
    protected DateTime? date;
}

// mapping in hbm
<component name="CompletedOn">
  <property column="StartedOn" name="date" access="field" not-null="false" />
</component>

From the nhibernate docs:

Like all value types, components do not support shared references. The null value semantics of a component are ad hoc. When reloading the containing object, NHibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes.

Can I override this behaviour? I want my Date class to be instantiated even if date is null.

Thanks,

+2  A: 

I don't think you can override that behavior.

However, it's usually easier to have NH work as usual (retrieving null) and wrap that in your domain model.

But from what I see, it looks like you are doing this maybe for a presentation (data binding?) concern. Isn't it easier to just expose a DateTime??

Diego Mijelshon
Mocking datetime.now is a problem then...
SharePoint Newbie
Either way, you can't mock a static method. You should inject a "current time" service. You are trying to deal with that at the wrong level.
Diego Mijelshon
+1  A: 

I think you could achieve this behavior by using a listener that implements IPostLoadEventListener. After the entity is loaded, you can check if the component is null and new it if it is.

Jamie Ide