【问题标题】:ADO.NET Data Service doesn't UpdateADO.NET 数据服务不更新
【发布时间】:2010-10-04 03:52:29
【问题描述】:

我在使用 ADO.NET 数据服务更新对象时遇到问题。

首先我创建了一个可以加载和存储数据的服务。它是实现 IUpdatable 接口的基本数据上下文。

之后,我创建了一个简单的服务客户端。我刚刚使用 Visual Studio 中的“添加服务”引用创建了它。基本上这项服务接缝工作。我可以查询对象并存储新对象。但是我无法更新对象。

这是我在客户端的更新代码:

        var ctx =
            new TeamDataContext(new Uri("http://localhost:8637/TeamInfoService.svc"));
        var team = ctx.Teams.First();
        team.TeamName = "New Team Name";
        ctx.UpdateObject(team);

        ctx.SaveChanges();

我的主要问题是,我想要更新的对象没有调用 IUpdatable.SetValue()。仅调用 IUpdatable.SaveChanges() 而不更新服务器上的对象。

当我创建一个新对象时,会在服务器上调用 IUpdatable.SetValue 来设置属性。

那么我做错了什么?我的期望错了吗?更新对象时应该调用 IUpdatable.SetValue 吗?还是我需要做一些额外的事情来进行更新?

编辑:我刚刚观察了客户端和服务器之间的 HTTP 请求。客户端发送带有更改的 HTTP-Merge 请求。但是我仍然不知道为什么没有存储更改。

【问题讨论】:

    标签: asp.net .net-4.0 wcf-data-services


    【解决方案1】:

    我刚刚发现了问题所在,现在感觉自己像个白痴。 TeamName 属性是对象的键。当然,当您更改密钥时,它实际上已经找不到要更新的对象了。因此它无法更新属性。

    所以,永远不要尝试更新对象的键 =)

    【讨论】:

    • 其实有点不同。它仍然应该找到对象(上下文会记住到实体的链接,而不管键值如何),但服务器将忽略对键属性的更新,因为这会改变实体的身份,这是不允许的。请注意,它会默默地执行此操作(按设计)。
    • 感谢更准确的解释
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多