Skip to content

Instantly share code, notes, and snippets.

@cdroulers
Created May 29, 2015 11:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cdroulers/6724d31b65f4060aaa6a to your computer and use it in GitHub Desktop.
Save cdroulers/6724d31b65f4060aaa6a to your computer and use it in GitHub Desktop.
An NHibernate Mutable Type for XML in SQL Server.
[Serializable]
public class XmlType<T> : MutableType
where T : class
{
public XmlType()
: base(new XmlSqlType())
{
}
public override string Name
{
get { return "XmlTypeOfT"; }
}
public override Type ReturnedClass
{
get { return typeof(T); }
}
public override void Set(IDbCommand cmd, object value, int index)
{
var valueTyped = value as T;
Set(cmd, valueTyped, index);
}
public void Set(IDbCommand cmd, T value, int index)
{
((IDataParameter)cmd.Parameters[index]).Value = XmlUtil.ToXml(value);
}
public override object Get(IDataReader rs, int index)
{
return rs.IsDBNull(index) ? null : FromStringValue((string)rs[index]);
}
public override object Get(IDataReader rs, string name)
{
return Get(rs, rs.GetOrdinal(name));
}
public override string ToString(object val)
{
var valueTyped = val as T;
return valueTyped != null ? XmlUtil.ToXml(valueTyped) : null;
}
public override object FromStringValue(string xml)
{
return xml != null ? XmlUtil.FromXml<T>(xml) : null;
}
public override object DeepCopyNotNull(object value)
{
var valueAsXmlString = ToString(value);
return FromStringValue(valueAsXmlString);
}
public override bool IsEqual(object x, object y)
{
if (x == null && y == null)
{
return true;
}
if (x == null || y == null)
{
return false;
}
return ToString(x) == ToString(y);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment