[Q] CompiledQuery для Insert/Update
От: Holms США  
Дата: 05.11.10 20:04
Оценка: 99 (1)
Такой код

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>>
The life is relative and reversible.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.