1: public class NullDateTimeAsMinDateType : IUserType
2: {
3: public new bool Equals(object x, object y)
4: {
5: if (ReferenceEquals(x, y))
6: return true;
7: if (x == null || y == null)
8: return false;
9: return x.Equals(y);
10: }
11: #region IUserType Members
12:
13: public object Assemble(object cached, object owner)
14: {
15: return cached;
16: }
17:
18: public object DeepCopy(object value)
19: {
20: return value;
21: }
22:
23: public object Disassemble(object value)
24: {
25: return value;
26: }
27:
28: public int GetHashCode(object x)
29: {
30: return x == null ? typeof(DateTime).GetHashCode() : x.GetHashCode();
31: }
32:
33: public bool IsMutable
34: {
35: get { return false; }
36: }
37:
38: public object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner)
39: {
40: var obj = NHibernateUtil.DateTime.NullSafeGet(rs, names[0]);
41: if (obj == null)
42: return DateTime.MinValue;
43:
44: DateTime dateTime = (DateTime) obj;
45: return dateTime;
46: }
47:
48: public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
49: {
50: if (value == null)
51: {
52: ((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
53: return;
54: }
55: DateTime dateTime = (DateTime)value;
56: if (dateTime.CompareTo(System.Data.SqlTypes.SqlDateTime.MinValue.Value) < 0)
57: ((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
58: else
59: ((IDataParameter)cmd.Parameters[index]).Value = dateTime;
60: }
61:
62: public object Replace(object original, object target, object owner)
63: {
64: return original;
65: }
66:
67: public Type ReturnedType
68: {
69: get { return typeof(DateTime); }
70: }
71:
72: public NHibernate.SqlTypes.SqlType[] SqlTypes
73: {
74: get { return new[] { NHibernateUtil.DateTime.SqlType }; }
75: }
76:
77: #endregion
78: }