This commit is contained in:
grzegorz.russek
2016-08-04 13:00:19 +00:00
parent 0c55aedbb1
commit 4fcef4d1ef
5 changed files with 44 additions and 26 deletions

View File

@@ -3698,9 +3698,7 @@ namespace DynamORM
/// <returns>Returns instance of builder on which action is set.</returns>
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
{
if (a == null)
b.OnCreateTemporaryParameter = null;
else
if (a != null)
{
if (b.OnCreateTemporaryParameter == null)
b.OnCreateTemporaryParameter = new List<Action<IParameter>>();
@@ -3718,9 +3716,7 @@ namespace DynamORM
/// <returns>Returns instance of builder on which action is set.</returns>
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
{
if (a == null)
b.OnCreateParameter = null;
else
if (a != null)
{
if (b.OnCreateParameter == null)
b.OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();
@@ -7090,6 +7086,8 @@ namespace DynamORM
VirtualMode = false;
Tables = new List<ITableInfo>();
Parameters = new Dictionary<string, IParameter>();
OnCreateTemporaryParameter = new List<Action<IParameter>>();
OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();
WhereCondition = null;
OpenBracketsCount = 0;
@@ -11872,18 +11870,28 @@ namespace DynamORM
try
{
if (Type.IsArray || _genericEnumerable)
if (!Type.IsAssignableFrom(val.GetType()))
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(_arrayType, x)).ToList();
if (Type.IsArray || _genericEnumerable)
{
if (val != null)
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(_arrayType, x)).ToList();
value = Array.CreateInstance(_arrayType, lst.Count);
value = Array.CreateInstance(_arrayType, lst.Count);
int i = 0;
foreach (var e in lst)
((Array)value).SetValue(e, i++);
int i = 0;
foreach (var e in lst)
((Array)value).SetValue(e, i++);
}
else
value = Array.CreateInstance(_arrayType, 0);
}
else
value = GetElementVal(Type, val);
}
else
value = GetElementVal(Type, val);
value = val;
Setter(dest, value);
}

View File

@@ -30,6 +30,8 @@ using System.Linq;
using DynamORM.Builders;
using DynamORM.Builders.Implementation;
using NUnit.Framework;
using DynamORM.Tests.Helpers;
using System.Collections.Generic;
namespace DynamORM.Tests.Modify
{

View File

@@ -214,6 +214,8 @@ namespace DynamORM.Builders.Implementation
VirtualMode = false;
Tables = new List<ITableInfo>();
Parameters = new Dictionary<string, IParameter>();
OnCreateTemporaryParameter = new List<Action<IParameter>>();
OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();
WhereCondition = null;
OpenBracketsCount = 0;

View File

@@ -877,9 +877,7 @@ namespace DynamORM
/// <returns>Returns instance of builder on which action is set.</returns>
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
{
if (a == null)
b.OnCreateTemporaryParameter = null;
else
if (a != null)
{
if (b.OnCreateTemporaryParameter == null)
b.OnCreateTemporaryParameter = new List<Action<IParameter>>();
@@ -897,9 +895,7 @@ namespace DynamORM
/// <returns>Returns instance of builder on which action is set.</returns>
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
{
if (a == null)
b.OnCreateParameter = null;
else
if (a != null)
{
if (b.OnCreateParameter == null)
b.OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();

View File

@@ -147,18 +147,28 @@ namespace DynamORM.Mapper
try
{
if (Type.IsArray || _genericEnumerable)
if (!Type.IsAssignableFrom(val.GetType()))
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(_arrayType, x)).ToList();
if (Type.IsArray || _genericEnumerable)
{
if (val != null)
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(_arrayType, x)).ToList();
value = Array.CreateInstance(_arrayType, lst.Count);
value = Array.CreateInstance(_arrayType, lst.Count);
int i = 0;
foreach (var e in lst)
((Array)value).SetValue(e, i++);
int i = 0;
foreach (var e in lst)
((Array)value).SetValue(e, i++);
}
else
value = Array.CreateInstance(_arrayType, 0);
}
else
value = GetElementVal(Type, val);
}
else
value = GetElementVal(Type, val);
value = val;
Setter(dest, value);
}