mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 FreeSql.DbContext/FreeSql.Repository 当主键为 Guid? 可空类型时,发生参数错误;#105 #106
> System.ArgumentException:“Expression of type 'System.Guid' cannot be used for assignment to type 'System.Nullable`1[System.Guid]'”
This commit is contained in:
parent
fa48170041
commit
cf0dfae545
@ -403,10 +403,56 @@ namespace FreeSql.Tests
|
|||||||
[Navigate("AuthorId")]
|
[Navigate("AuthorId")]
|
||||||
public List<Post> Post { get; set; }
|
public List<Post> Post { get; set; }
|
||||||
}
|
}
|
||||||
|
public class TestGuidId
|
||||||
|
{
|
||||||
|
public Guid? Id { get; set; }
|
||||||
|
public string xxx { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Test1()
|
public void Test1()
|
||||||
{
|
{
|
||||||
|
g.sqlite.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||||
|
g.sqlite.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||||
|
var gkkdk1 = g.sqlite.Select<TestGuidId>().Where(a => true).ToList();
|
||||||
|
using (var testguididdb = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
var gkkdk11 = testguididdb.Set<TestGuidId>().Select.Where(a => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
g.oracle.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||||
|
g.oracle.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||||
|
var gkkdk2 = g.oracle.Select<TestGuidId>().Where(a => true).ToList();
|
||||||
|
using (var testguididdb = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
var gkkdk22 = testguididdb.Set<TestGuidId>().Select.Where(a => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
g.pgsql.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||||
|
g.pgsql.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||||
|
var gkkdk3 = g.pgsql.Select<TestGuidId>().Where(a => true).ToList();
|
||||||
|
using (var testguididdb = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
var gkkdk22 = testguididdb.Set<TestGuidId>().Select.Where(a => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
g.mysql.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||||
|
g.mysql.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||||
|
var gkkdk4 = g.mysql.Select<TestGuidId>().Where(a => true).ToList();
|
||||||
|
using (var testguididdb = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
var gkkdk22 = testguididdb.Set<TestGuidId>().Select.Where(a => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
g.sqlserver.Insert(new TestGuidId { xxx = "111" }).ExecuteAffrows();
|
||||||
|
g.sqlserver.Insert(new TestGuidId { xxx = "222" }).ExecuteAffrows();
|
||||||
|
var gkkdk5 = g.sqlserver.Select<TestGuidId>().Where(a => true).ToList();
|
||||||
|
using (var testguididdb = g.sqlite.CreateDbContext())
|
||||||
|
{
|
||||||
|
var gkkdk22 = testguididdb.Set<TestGuidId>().Select.Where(a => true).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var testlistinsert = new List<AuthorTest>();
|
var testlistinsert = new List<AuthorTest>();
|
||||||
g.sqlite.Insert(testlistinsert).ExecuteAffrows();
|
g.sqlite.Insert(testlistinsert).ExecuteAffrows();
|
||||||
|
|
||||||
|
@ -53,11 +53,12 @@ namespace FreeSql.Extensions.EntityUtil
|
|||||||
Expression expthen = null;
|
Expression expthen = null;
|
||||||
if (isguid)
|
if (isguid)
|
||||||
{
|
{
|
||||||
if (pks[a].Attribute.MapType == pks[a].CsType)
|
Expression newguid = Expression.Call(MethodFreeUtilNewMongodbId);
|
||||||
{
|
if (pks[a].Attribute.MapType != pks[a].CsType) newguid = FreeSql.Internal.Utils.GetDataReaderValueBlockExpression(pks[a].CsType, newguid);
|
||||||
|
if (pks[a].CsType == typeof(Guid?)) newguid = Expression.Convert(newguid, typeof(Guid?));
|
||||||
expthen = Expression.Block(
|
expthen = Expression.Block(
|
||||||
new Expression[]{
|
new Expression[]{
|
||||||
Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), Expression.Call(MethodFreeUtilNewMongodbId)),
|
Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), newguid),
|
||||||
a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null,
|
a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null,
|
||||||
Expression.Call(var2Sb, MethodStringBuilderAppend,
|
Expression.Call(var2Sb, MethodStringBuilderAppend,
|
||||||
Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object))
|
Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object))
|
||||||
@ -65,19 +66,6 @@ namespace FreeSql.Extensions.EntityUtil
|
|||||||
}.Where(c => c != null).ToArray()
|
}.Where(c => c != null).ToArray()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
expthen = Expression.Block(
|
|
||||||
new Expression[]{
|
|
||||||
Expression.Assign(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), FreeSql.Internal.Utils.GetDataReaderValueBlockExpression(pks[a].CsType, Expression.Call(MethodFreeUtilNewMongodbId))),
|
|
||||||
a > 0 ? Expression.Call(var2Sb, MethodStringBuilderAppend, Expression.Constant(splitString)) : null,
|
|
||||||
Expression.Call(var2Sb, MethodStringBuilderAppend,
|
|
||||||
Expression.Convert(Expression.MakeMemberAccess(var1Parm, _table.Properties[pks[a].CsName]), typeof(object))
|
|
||||||
)
|
|
||||||
}.Where(c => c != null).ToArray()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (pks.Length > 1 && pks[a].Attribute.IsIdentity)
|
else if (pks.Length > 1 && pks[a].Attribute.IsIdentity)
|
||||||
{
|
{
|
||||||
expthen = Expression.Block(
|
expthen = Expression.Block(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user