diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs b/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs
new file mode 100644
index 00000000000..7d73e7f391b
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs
@@ -0,0 +1,23 @@
+using System.Xml;
+
+namespace NHibernate.Test.NHSpecificTest.NH3518
+{
+ public class ClassWithXmlMember
+ {
+ private int _id;
+
+ public ClassWithXmlMember(string name, XmlDocument xml)
+ {
+ Xml = xml;
+ this.Name = name;
+ }
+
+ private ClassWithXmlMember()
+ {
+ }
+
+ public string Name { get; private set; }
+
+ public XmlDocument Xml { get; private set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml
new file mode 100644
index 00000000000..77e6f779e68
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs
new file mode 100644
index 00000000000..4d252f6cfd3
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs
@@ -0,0 +1,48 @@
+using System.Xml;
+using NHibernate.Cfg;
+using NHibernate.Driver;
+using NHibernate.Engine;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH3518
+{
+ [TestFixture]
+ public class XmlColumnTest : BugTestCase
+ {
+ protected override void OnTearDown()
+ {
+ using (var session = sessions.OpenSession())
+ using (var t = session.BeginTransaction())
+ {
+ session.Delete("from ClassWithXmlMember");
+ t.Commit();
+ }
+ }
+
+ protected override bool AppliesTo(ISessionFactoryImplementor factory)
+ {
+ return factory.ConnectionProvider.Driver is SqlClientDriver;
+ }
+
+ protected override void Configure(Configuration configuration)
+ {
+ configuration.SetProperty(Environment.PrepareSql, "true");
+ }
+
+ [Test]
+ public void FilteredQuery()
+ {
+ var xmlDocument = new XmlDocument();
+ var xmlElement = xmlDocument.CreateElement("testXml");
+ xmlDocument.AppendChild(xmlElement);
+ var parentA = new ClassWithXmlMember("A", xmlDocument);
+
+ using (var s = sessions.OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ s.Save(parentA);
+ t.Commit();
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj
index 875874ec7cb..6afa978f17f 100644
--- a/src/NHibernate.Test/NHibernate.Test.csproj
+++ b/src/NHibernate.Test/NHibernate.Test.csproj
@@ -718,6 +718,8 @@
+
+
@@ -3153,6 +3155,7 @@
+
diff --git a/src/NHibernate/Driver/SqlClientDriver.cs b/src/NHibernate/Driver/SqlClientDriver.cs
index fa33488ecc8..4c748ff38a9 100644
--- a/src/NHibernate/Driver/SqlClientDriver.cs
+++ b/src/NHibernate/Driver/SqlClientDriver.cs
@@ -15,6 +15,8 @@ public class SqlClientDriver : DriverBase, IEmbeddedBatcherFactoryProvider
public const int MaxSizeForAnsiClob = 2147483647; // int.MaxValue
public const int MaxSizeForClob = 1073741823; // int.MaxValue / 2
public const int MaxSizeForBlob = 2147483647; // int.MaxValue
+ //http://stackoverflow.com/a/7264795/259946
+ public const int MaxSizeForXml = 2147483647; // int.MaxValue
public const int MaxSizeForLengthLimitedAnsiString = 8000;
public const int MaxSizeForLengthLimitedString = 4000;
public const int MaxSizeForLengthLimitedBinary = 8000;
@@ -141,6 +143,9 @@ protected static void SetDefaultParameterSize(IDbDataParameter dbParam, SqlType
case DbType.DateTimeOffset:
dbParam.Size = MaxDateTimeOffset;
break;
+ case DbType.Xml:
+ dbParam.Size = MaxSizeForXml;
+ break;
}
}