首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack: Update<T>(…)产生“重复条目”

问ServiceStack: Update<T>(…)产生“重复条目”
EN

Stack Overflow用户
提问于 2018-06-26 21:00:28
回答 1查看 148关注 0票数 0

我尝试过读取文档,但是我不明白为什么更新方法会产生一个“重复条目”MySQL错误。

医生说

在其最简单的形式中,不带任何筛选器的任何模型更新都将更新每个字段,但用于筛选更新到此特定记录的Id除外:

所以我试了一下,然后传入一个物体,如下所示。id 2的行已经存在。

代码语言:javascript
复制
using (var _db = _dbFactory.Open())
{
    Customer coreObject = new Customer(...);
    coreObject.Id = 2;
    coreObject.ObjectName = "a changed value";
    _db.Update<Customer>(coreObject); // <-- error "duplicate entry"
}

是的,有使用.Save之类的选项,但是.Update缺少什么呢?当我阅读它时,它应该使用其Id属性来更新db中的行,而不是插入新行?

​

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 22:39:55

此方法的问题是您正在更新一个通用对象T,但是您的Update要求更新具体的Customer类型:

代码语言:javascript
复制
public void MyTestMethod<T>(T coreObject) where T : CoreObject
{
    long id = 0;
    using (var _db = _dbFactory.Open())
    {
        id = _db.Insert<T>(coreObject, selectIdentity: true);

        if (DateTime.Now.Ticks == 0)
        {
            coreObject.Id = (uint)id;
            _db.Delete(coreObject);
        }
        if (DateTime.Now.Ticks == 0)
        {
            _db.DeleteById<Customer>(id);
        }
        if (DateTime.Now.Ticks == 0)
        {
            coreObject.Id = (uint)id;
            coreObject.ObjectName = "a changed value";
            _db.Update<Customer>(coreObject);
        }
    }           
}

哪个OrmLite假设您使用不同的/匿名对象来更新customer表,类似于:

代码语言:javascript
复制
db.Update<Customer>(new { Id = id, ObjectName = "a changed value", ... });

因为它没有WHERE过滤器,所以它将尝试用相同的主键更新所有行。

相反,您希望更新相同的实体,要么传入泛型类型T,要么通过不传递任何类型来推断它,例如:

代码语言:javascript
复制
_db.Update<T>(coreObject);
_db.Update(coreObject);

它将通过更新每个字段来使用OrmLite的更新实体行为,除了在WHERE表达式中使用的主键之外,它将更新限制为只更新该实体。

v5.1.1中的新行为

为了防止意外的误用,我在此承诺中添加了Update重载,在使用匿名对象更新实体时,它将使用主键作为筛选器,因此您以前的使用:

代码语言:javascript
复制
_db.Update<Customer>(coreObject);

将主键添加到WHERE筛选器中,而不是将其包含在设置列表中。此更改可从v5.1.1即现在的可在MyGet上获得中获得。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51051302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档