【问题标题】:Update a Table Per Hierarchy entity from JS or JQUERY从 JS 或 JQUERY 更新每个层次结构的表实体
【发布时间】:2013-05-30 16:22:47
【问题描述】:

我创建了一个 CARS 表的 ENTITY FRAMEWORK 模型,并在 EDMX 设计器上制作了两个 TPH 实体并将它们命名为 OLD CAR 和 NEW CAR,并将我的 CARS 表设置为 Abstract。

现在,我正在从 JQUERY 访问 CARS 实体,我可以执行以下操作:

  • GET(工作正常)
  • 删除(工作正常)

但我无法在派生的继承实体中创建(POST)或更新(PUT),它给了我以下错误“必须为继承的类型指定类型信息”

我已经从 WCF 数据服务公开了我的所有实体

下面是我的代码;

 function putData() {
          var url = "http://localhost:55153/WebSite3/WcfDataService1.svc/Cars(2)";

          var obj = '{"CarName": "Margalla", "CarModel" : "Honda"}';
          var r = window.JSON.stringify(obj);
          $.ajax({
              type: "PUT",
              url: url,
              data: obj,
              contentType: "application/json; charset=utf-8",
              dataType: "json",
              success: function (msg) {
                  alert("Updated successful");
              },
              error: function (msg) {
                  alert(msg.responseText);
              }
          });
      }

【问题讨论】:

  • 你检查过参数CarNameCarModel在WCF服务中是否有相同的名字?您如何在Cars(2) 函数中获取这些数据?
  • 是的,它们具有相同的名称,它是通过 ODATA 技术调用的。
  • 你能在 WCF 中发布函数吗

标签: javascript jquery wcf entity-framework wcf-data-services


【解决方案1】:

这里的问题是服务器不知道您要插入(或修改)哪种类型的汽车。

尝试更改您的有效负载以包含“odata.type”属性。例如:

var obj = '{
            "odata.type": "YourNamespace.OldCar", 
            "CarName": "Margalla", 
            "CarModel" : "Honda"
           }';

“odata.type”属性特定于新的 JSON 格式(仅限 v3 OData),因此我还建议在请求中包含“DataServiceVersion”标头,以使服务器清楚您正在发送 v3有效载荷。例如:

$.ajax({
          ...
          beforeSend: function (request)
          {
              request.setRequestHeader("DataServiceVersion", "3.0");
          },
          ...
       });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多