Skip to content

Commit f7980ee

Browse files
committed
NH-3842 - Fix DateTimeOffsetType throwing exception in DefaultValue property
1 parent 9faa35c commit f7980ee

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetFixture.cs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using System;
22
using System.Collections;
33
using System.Data;
4+
using System.IO;
5+
using System.Runtime.Serialization.Formatters.Binary;
6+
using System.Xml.Serialization;
47
using NHibernate.Driver;
58
using NHibernate.Type;
69
using NUnit.Framework;
@@ -101,5 +104,32 @@ public void Seed()
101104
Assert.That(type.Seed(null), Is.TypeOf<DateTimeOffset>());
102105
}
103106

107+
[Test(Description = "NH-3842")]
108+
public void DefaultValueDoesNotThrowException()
109+
{
110+
var type = NHibernateUtil.DateTimeOffset;
111+
112+
Assert.That(() => type.DefaultValue, Throws.Nothing);
113+
}
114+
115+
[Test(Description = "NH-3842")]
116+
public void CanBinarySerialize()
117+
{
118+
var type = NHibernateUtil.DateTimeOffset;
119+
120+
var formatter = new BinaryFormatter();
121+
122+
Assert.That(() => formatter.Serialize(Stream.Null, type), Throws.Nothing);
123+
}
124+
125+
[Test(Description = "NH-3842")]
126+
public void CanXmlSerialize()
127+
{
128+
var type = NHibernateUtil.DateTimeOffset;
129+
130+
var formatter = new XmlSerializer(typeof(DateTimeOffsetType));
131+
132+
Assert.That(() => formatter.Serialize(Stream.Null, type), Throws.Nothing);
133+
}
104134
}
105-
}
135+
}

src/NHibernate/Type/DateTimeOffSetType.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ namespace NHibernate.Type
1313
[Serializable]
1414
public class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType
1515
{
16+
static readonly DateTimeOffset BaseDateValue = DateTimeOffset.MinValue;
17+
1618
/// <summary></summary>
1719
public DateTimeOffsetType()
1820
: base(SqlTypeFactory.DateTimeOffSet)
@@ -36,7 +38,7 @@ public override System.Type PrimitiveClass
3638

3739
public override object DefaultValue
3840
{
39-
get { throw new NotImplementedException(); }
41+
get { return BaseDateValue; }
4042
}
4143

4244
public IComparer Comparator
@@ -56,7 +58,6 @@ public override object Get(IDataReader rs, int index)
5658
try
5759
{
5860
var dbValue = (DateTimeOffset) rs[index];
59-
;
6061
return new DateTimeOffset(dbValue.Ticks, dbValue.Offset);
6162
}
6263
catch (Exception ex)
@@ -118,4 +119,4 @@ public override string ObjectToSQLString(object value, Dialect.Dialect dialect)
118119
return "'" + ((DateTimeOffset) value) + "'";
119120
}
120121
}
121-
}
122+
}

0 commit comments

Comments
 (0)