Commit dd7bdd3c authored by Sam Saffron's avatar Sam Saffron

Make Nick happy, better error for constructorless types

parent edd142d4
...@@ -1504,7 +1504,12 @@ static List<FieldInfo> GetSettableFields(Type t) ...@@ -1504,7 +1504,12 @@ static List<FieldInfo> GetSettableFields(Type t)
} }
else else
{ {
il.Emit(OpCodes.Newobj, type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null)); var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
if (ctor == null)
{
throw new InvalidOperationException("A parameterless default constructor is required to allow for dapper materialization");
}
il.Emit(OpCodes.Newobj, ctor);
il.Emit(OpCodes.Stloc_1); il.Emit(OpCodes.Stloc_1);
} }
il.BeginExceptionBlock(); il.BeginExceptionBlock();
......
...@@ -33,6 +33,29 @@ public class ConcreteOrder : Order ...@@ -33,6 +33,29 @@ public class ConcreteOrder : Order
} }
} }
class NoDefualtConstructor
{
public NoDefualtConstructor(int a)
{
A = a;
}
public int A { get; set; }
}
public void EnsureNoConstructorGivesNiceError()
{
try
{
connection.Query<NoDefualtConstructor>("select 1 A").First();
}
catch(InvalidOperationException e)
{
e.Message.IsEqualTo("A parameterless default constructor is required to allow for dapper materialization");
}
}
// http://stackoverflow.com/q/8593871 // http://stackoverflow.com/q/8593871
public void TestAbstractInheritance() public void TestAbstractInheritance()
{ {
...@@ -42,10 +65,8 @@ public void TestAbstractInheritance() ...@@ -42,10 +65,8 @@ public void TestAbstractInheritance()
order.ProtectedVal.IsEqualTo(2); order.ProtectedVal.IsEqualTo(2);
order.Public.IsEqualTo(3); order.Public.IsEqualTo(3);
order.Concrete.IsEqualTo(4); order.Concrete.IsEqualTo(4);
} }
public void TestListOfAnsiStrings() public void TestListOfAnsiStrings()
{ {
var results = connection.Query<string>("select * from (select 'a' str union select 'b' union select 'c') X where str in @strings", var results = connection.Query<string>("select * from (select 'a' str union select 'b' union select 'c') X where str in @strings",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment