Такой код
class Program
{
private static readonly Func<MeditanoDataContext, int, string, int> UpdateQuery =
CompiledQuery.Compile<MeditanoDataContext, int, string, int>((ctx, key, value) =>
ctx.LUUnit
.Where(_ => _.UnitId == key)
.Set(_ => _.UnitName, value)
.Update());
static void Main(string[] args)
{
using (var ctx = new MeditanoDataContext())
{
UpdateQuery(ctx, 5, "Years XXX");
}
Console.ReadKey();
}
}
...
[TableName(Name="LUUnit")]
public partial class LUUnit
{
[Identity, PrimaryKey(1)] public int UnitId { get; set; }
public string UnitName { get; set; }
[Nullable ] public bool? IsDefault { get; set; }
}
падает с ошибкой
Unable to cast object of type 'System.Linq.Expressions.UnaryExpression' to type 'System.Linq.Expressions.ParameterExpression'.
Можно ли использовать CompiledQueries для DML операций?
Call Stack
> BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert<System.Linq.Expressions.ParameterExpression>(System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression> source = Count = 1, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1292 C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert(System.Linq.Expressions.Expression expr = {System.Linq.Expressions.Expression<System.Func<MeditanoDataModel.LUUnit,string>>}, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1419 + 0x39 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert(System.Linq.Expressions.Expression expr = {System.Linq.Expressions.UnaryExpression}, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1360 + 0x28 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert<System.Linq.Expressions.Expression>(System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> source = Count = 3, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1291 + 0xb bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert(System.Linq.Expressions.Expression expr = {System.Linq.Expressions.MethodCallExpressionN}, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1375 + 0x39 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert<System.Linq.Expressions.Expression>(System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> source = Count = 1, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1291 + 0xb bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionHelper.Convert(System.Linq.Expressions.Expression expr = {System.Linq.Expressions.MethodCallExpressionN}, System.Func<System.Linq.Expressions.Expression,System.Linq.Expressions.Expression> func = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 1375 + 0x39 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.CompiledQuery.CompileQuery(System.Linq.Expressions.LambdaExpression query = {System.Linq.Expressions.Expression<System.Func<MeditanoDataModel.MeditanoDataContext,int,string,int>>}) Line 57 + 0x3a bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.CompiledQuery.ExecuteQuery<int>(object[] args = {object[3]}) Line 28 + 0x12 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.CompiledQuery.Invoke<MeditanoDataModel.MeditanoDataContext,int,string,int>(MeditanoDataModel.MeditanoDataContext dataContext = {MeditanoDataModel.MeditanoDataContext}, int arg1 = 5, string arg2 = "Years XXX") Line 106 + 0x74 bytes C#
TestCompiledQueies.exe!TestCompiledQueies.Program.Main(string[] args = {string[0]}) Line 23 + 0x19 bytes C#
[External Code]
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>