无法使用LINQPad 4更新行

本文关键字:更新 LINQPad | 更新日期: 2023-09-27 18:04:43

我可以很好地从Oracle数据库查询行,使用IQ的直接接口,但有麻烦与一个简单的更新。我想知道我是否做错了什么,或者IQ是否不能处理我的特定Oracle表。

我的表有一个主键NUMBER(22),这导致实体为Int64。查询有两个数字列,我要更新的列是一个CHAR,它是实体中的字符串。

这是我的更新…

var c = Components.Single (c => c.Componentordernumber == 119137 && c.Componentorderversion == 1);
c.Circuitordernumber = "11043913";
SubmitChanges();
Components.Where (c => c.Componentordernumber == 119137 && c.Componentorderversion == 1).Dump();

当我在LINQPad中运行此操作时,它在SubmitChange()处失败。有一个TargetInvocationException(在_InvokeMethodFast)。内部异常是…

InvalidOperationException - The binary operator Equal is not defined for the types 'System.Int64' and 'System.Object'.
TargetSite: Expression.GetEqualityComparisonOperator (ExpressionType binaryType, String opName, Expression left, Expression right, Boolean liftToNull)
Stacke Trace:
  at System.Linq.Expressions.Expression.GetEqualityComparisonOperator(ExpressionType binaryType, String opName, Expression left, Expression right, Boolean liftToNull)
  at System.Linq.Expressions.Expression.Equal(Expression left, Expression right)
  at IQToolkit.Data.EntityRef`1.QueryParent()
  at IQToolkit.Data.EntityRef`1.get_Value()

无法使用LINQPad 4更新行

我在删除行时遇到了同样的问题。我找到了一个解决方案,将值为null的所有可空长字段设置为非空值(例如0L)。

为了简化这个,我写了一个简短的扩展方法PatchForDelete(见下文),并使用它如下:

var testUsers = Users.Where (a => a.login.StartsWith("test")); 
testUsers.Dump();
foreach (var user in testUsers) {
    MyExtensions.PatchForDelete(user);  
    AsdBenutzers.DeleteOnSubmit(user);  
}
SubmitChanges();

问候,沃尔特。

//
// Patch for Bug in IQ-Driver
//
// If each nullable long field which is null ist set to 0L
// DeleteOnSubmit() works!!
//
public static void PatchForDelete(object entity) {
    var fields = entity.GetType().GetFields();
    foreach (var field in fields) {
        if (field.FieldType == typeof(long?)) {
            var v = field.GetValue(entity);             
            if (v == null) {
                field.SetValue(entity, 0L);
            }
        }
    }
}

我刚刚遇到了类似的错误。从所有我能够找到它看起来像是IQ驱动程序中围绕可空外键的错误。

详细信息:http://forum.linqpad.net/discussion/225/nullable-foreign-key-bug-in-iq-driver

不幸的是,我不知道如何解决这个错误,除了放弃linqPad解决方案。