BLToolkit:尝试更新实体并获得“无法转换为 SQL 错误”

Posted

技术标签:

【中文标题】BLToolkit:尝试更新实体并获得“无法转换为 SQL 错误”【英文标题】:BLToolkit: Trying to update an entity and getting "can't convert to SQL error" 【发布时间】:2011-04-27 23:29:06 【问题描述】:

我有一个更新方法:

protected int ProcessUpdate(TUpdateDto updateDto, Func<IQueryable<TEntity>, IUpdateable<TEntity>> firstSetter, params Func<IUpdateable<TEntity>, IUpdateable<TEntity>>[] setters)       
    
        Checker.AssertNull(updateDto);
        int id = updateDto.Id.FailIfNull();

        IQueryable<TEntity> query = from item in new Table<TEntity>()
                                    where item.Id == id
                                    select item;

        IUpdateable<TEntity> updateable = firstSetter(query);

        foreach (var setter in setters)
        
            setter(updateable);
        

        Checker.AssertNull(updateable);
        updateable.Update();

        return id;
    

和实体:

[TableName("Test")]
public class Test

    [PrimaryKey, Identity]
    public int Id  get; set; 

    public string Field1  get; set; 

这里是更新代码:

 ProcessUpdate(updateDto, x => x.Set(e => e.Id, updateDto.Id), 
                          x => x.Set(e => e.Field1, updateDto.Field1));

当我尝试更新表中的条目时,我得到“'Convert(item).Id' 无法转换为 SQL。”错误。我试过不更新id,结果是一样的。我希望我能找到解决方案,但我不能。感谢您的回答。

【问题讨论】:

【参考方案1】:

解决方案是修改 BLToolkit 源代码。

【讨论】:

以上是关于BLToolkit:尝试更新实体并获得“无法转换为 SQL 错误”的主要内容,如果未能解决你的问题,请参考以下文章

ClassCastException:整数无法转换为 Long,同时尝试迭代实体 ID

如何在 BLToolkit 中将 DataTable 作为参数传递?

为啥 BLToolkit 没有更受欢迎? [关闭]

查询 (LINQ) 表达式无法转换为实体框架核心

BLToolkit-mysql-connector 异常:无法加载文件或程序集 MySql.Data,版本 = 6.9.7.0

尝试在反应组件的返回中使用 setstate 更新状态并获得“最大更新深度超出错误”?