mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
Merge pull request #1403 from hyzx86/ExpandoObject
参数化增加 ExpandoObject支持
This commit is contained in:
commit
53936377c3
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -45,6 +46,30 @@ namespace FreeSql.Tests.Internal
|
||||
Assert.Equal("test", ps2[0].Value);
|
||||
Assert.Equal("p", ps2[0].ParameterName);
|
||||
Assert.Equal(typeof(SqlParameter), ps2[0].GetType());
|
||||
|
||||
|
||||
//测试匿名对象支持
|
||||
dynamic expObj = new ExpandoObject();
|
||||
expObj.p = "test";
|
||||
|
||||
Func<string, Type, object, DbParameter> constructorParamter = (name, type, value) =>
|
||||
{
|
||||
if (value?.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1);
|
||||
var ret = new SqlParameter { ParameterName = $"@{name}", Value = value };
|
||||
return ret;
|
||||
};
|
||||
|
||||
var ps3 = FreeSql.Internal.Utils.
|
||||
GetDbParamtersByObject<DbParameter>("select @p",
|
||||
expObj,
|
||||
"@",
|
||||
constructorParamter);
|
||||
Assert.Single(ps3);
|
||||
Assert.Equal("test", ps3[0].Value);
|
||||
Assert.Equal("p", ps3[0].ParameterName);
|
||||
Assert.Equal(typeof(SqlParameter), ps3[0].GetType());
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -91,7 +91,7 @@ namespace FreeSql.Internal
|
||||
else colattr.IsIgnore = true;
|
||||
//Navigate 错误提示
|
||||
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, p);
|
||||
if (pnvAttr != null) throw new Exception(CoreStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(),p.Name));
|
||||
if (pnvAttr != null) throw new Exception(CoreStrings.Navigation_Missing_SetProperty(trytb.Type.DisplayCsharp(), p.Name));
|
||||
}
|
||||
if (tp == null && colattr?.IsIgnore != true)
|
||||
{
|
||||
@ -1433,7 +1433,7 @@ namespace FreeSql.Internal
|
||||
var type = obj.GetType();
|
||||
if (ttype.IsAssignableFrom(type)) return new[] { (T)obj };
|
||||
var ret = new List<T>();
|
||||
var dic = obj as IDictionary;
|
||||
var dic = obj as IDictionary<string, object>;
|
||||
if (dic != null)
|
||||
{
|
||||
foreach (var key in dic.Keys)
|
||||
|
Loading…
x
Reference in New Issue
Block a user