使用 WCF 将 Linq-to-Sql 对象发送到服务器时出错

2024-03-12

我正在尝试开发一个具有 2 层的系统:移动客户端和使用 LINQ to SQL 在数据库中存储信息的服务器。 我想创建一个在服务器中存储任务的 WCF 服务器,因此它将从客户端接收任务并使用 LINQ to SQL 来存储它。

为了执行此服务,我创建了 dbml 文件,以便可以使用数据上下文。

这是我的服务方法:

public Task SaveTask(string token, Task task)
    {
        TrackingDataContext dataConext = new TrackingDataContext();


        //Saves/Updates the task
        dataConext.Tasks.InsertOnSubmit(task);
        dataConext.SubmitChanges();

        return task;
    }

该令牌将在未来使用

这是我的客户端方法,它将调用该服务:

private void btnSave_Click(object sender, EventArgs e)
    {
        //Populate the object with the info
        Task task = new Task();
        task.Title = tbTitle.Text;
        task.Description = tbDescription.Text;
        //this is a FK to another table
        task.Severity = ((Severity)lbSeverities.SelectedItem);
        //the first state: "open"
        task.StateID = 1;

        //Save the task
        client.SaveTaskCompleted += new EventHandler<SaveTaskCompletedEventArgs>(client_SaveTaskCompleted);
        client.SaveTaskAsync(App.Token, task);
    }

正如您所看到的,我正在创建一个新对象,填充它并将其发送到我的服务,该服务将获取并存储它。理论上它可以正常工作。

客户端能够创建对象并将其发送到服务器。 当服务器收到请求时,它尝试再次构建该对象,但随后我在此方法中收到 System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException (从 VS2010 自动创建):

 [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SeverityID", DbType="Int NOT NULL")]
        public int SeverityID
        {
            get
            {
                return this._SeverityID;
            }
            set
            {
                if ((this._SeverityID != value))
                {
                    if (this._Severity.HasLoadedOrAssignedValue)
                    {
                        throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
                    }
                    this.OnSeverityIDChanging(value);
                                    //The exception happens in this line                    
                                    this.SendPropertyChanging();
                    this._SeverityID = value;
                    this.SendPropertyChanged("SeverityID");
                    this.OnSeverityIDChanged();
                }
            }
        }

我的服务器方法不可能有任何错误,因为: 1-非常简单,里面没有逻辑 2-我什至无法调试它,错误发生在调用我的方法之前,可能是在解组请求时。

这样的事情怎么可能发生呢?哪里可以看?这可能是配置问题吗?

谢谢你, 奥斯卡

编辑:找到这个链接通过 Wcf 序列化 Linq2Sql - 错误或误解? https://stackoverflow.com/questions/1351099/serializing-linq2sql-over-wcf-bug-or-misunderstanding,他们说这是一个错误,但它是 1 年前的。有谁知道问题解决了吗?


所以基本上这里发生的事情是客户端正在发送一个物化对象图。任务对象有一个Severity属性和相应的SeverityID财产。当服务器反序列化客户端的请求时,它会创建一个Task对象,然后可能反序列化Severity财产第一。现在,当SeverityID反序列化时,会遇到 LINQ to SQL 的限制...

if (this._Severity.HasLoadedOrAssignedValue) {
    throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}

您无法设置外键属性(SeverityID) 如果相关对象的属性 (Severity) 已经设置。

我怀疑这就是 LINQ to SQL 将其序列化模式称为“单向”的原因,因为传回物化集合会导致此类问题。

而不是设置Severity客户端上的属性,尝试设置SeverityID财产代替。您也可以尝试禁用服务器上的延迟加载,但我不知道这是否会产生任何影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WCF 将 Linq-to-Sql 对象发送到服务器时出错 的相关文章

随机推荐

  • 角度 HTTP POST 请求

    我在 Angular2 和 Spring MVC 中构建一个应用程序 当我尝试向我的服务器发出 POST 请求时 我没有收到任何成功或失败的迹象 但请求没有发生 因为我看不到新的数据 当我从邮递员那里发出请求时 请求成功 我可以看到新数据
  • 什么时候应该使用 MySQLi 而不是 MySQL?

    有人可以帮我解释一下使用 MySQLi 而不是 MySQL 的优点和缺点吗 是否存在不应该使用 MySQLi 的情况 为了使用 MySQLi 我是否需要以不同的方式配置我的服务器 例如 我是否需要升级 Apache 或 PHP 才能支持 M
  • 如何创建带有百分比计数器的 jQuery 预加载器?

    我编写了从一本 jQuery 初学者书中学到的代码 它非常适合作为页面的预加载器 但我如何为其创建百分比 计数器呢 基于加载了多少正文内容 目前我只有一个动画 GIF 但我想要一些更高级的东西 Lets preload window loa
  • 使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功?

    有类似的东西 Getter Setter public static class Entity private int hash private LocalDateTime createdTime and Getter Setter pub
  • 调用 oncontextmenu 时 Firefox 浏览器的事件未定义

    我在右键单击页面中的按钮时显示上下文菜单 用于显示上下文菜单的代码是 window addEventListener contextmenu function e e preventDefault false 当我右键单击按钮时 调用的上下
  • 解决 git merge octopus 上的冲突

    章鱼合并是指合并2个以上的头 用户应该如何使用普通的三向合并工具比较文件 3 个文件被传递到合并工具 BASE LOCAL REMOTE 3 个头需要多少个以及什么组合 在这种情况下 您不应该使用章鱼合并 八达通合并仅应在不存在合并冲突或冲
  • setInterval 使用 Electron 一小时后停止

    希望有人能在这里指出我正确的方向 我的电子应用程序需要每 10 分钟左右执行一次 API 调用 目前 我在渲染器进程中使用 setInterval 循环来执行此操作 该循环每 10 分钟触发一次 它通常工作得很好 几个小时后似乎就停止了 我
  • Android Studio 在创建新活动时“发生 IDE 错误”

    更新见底部 由于 Android Studio 将自身更新到 v3 0 我无法创建新的 Activity 我收到此错误报告对话框 显示 2 个错误 我尝试了不同的项目 尝试清理项目 重新同步 gradle 重新启动计算机 卸载 重新安装 A
  • strdup():对警告感到困惑(“隐式声明”、“使指针...无需强制转换”、内存泄漏)

    当我编译下面的一小段代码 其中我们定义一个字符串 然后使用 strdup 来制作副本 时 我收到 3 个警告 来自 GCC 的 2 个编译器警告和来自 valgrind 的 1 个运行时警告 错误 我怀疑内存泄漏错误 由 valgrind
  • x86-SSE 中四个压缩单精度浮点到无符号双字的转换

    有没有办法将四个打包单精度浮点值转换为具有 SSE 扩展的 x86 中的四个双字 最接近的指令是CVTPS2PI 但它不能在两个 xmm 寄存器上执行 而是应该给出为CVTPS2PI MM XMM M64 如果我想要类似的东西怎么办
  • R metaMDS 排序距离

    我一直在对不同采样点的丰富物种数据集进行一些排序 我在用metaMDS 素食主义者可以做到这一点 通过此功能 您可以 直接输入群落数据 行中的站点和列中的物种 并指定您希望使用的距离类型 即 jaccard brays curtis euc
  • Linux 上的 OpenCL,集成英特尔图形芯片

    我想用OpenCL在 Debian 8 上 我读到在本页 http streamcomputing eu blog 2011 12 29 opencl hardware support Linux 上不支持 Intel 的 GPU 这篇文章
  • XCode 4.5 警告父/子类的类别之间的方法名称冲突

    我正在开发一个最初使用 XCode 4 0 构建的项目 然后迁移到使用 XCode 4 2 现在我已经测试了迁移到 XCode 4 5 并且收到了大量如下警告 instance method values in category from
  • 如何将模型数据对象数组转换为dataProvider

    假设我有模型User与其自身有多对多的关系 命名为friends so user gt friends or model gt friends在视图中 给了我一个数组User对象 我想将朋友显示为网格视图 但CGridView数据为data
  • 在二维动画上绘制可变大小和位置的圆圈

    我正在 Python 3 3 中使用 matplotlib 我有一个动画 2d 和 3d 窗口 我在上面画点 这些点代表物体 但不确定它们是否真的存在 所以我想围绕这些点画一个圆圈来显示不确定性 这种不确定性是变化的 所以底线是 我想在 2
  • JavaScript 中可以编写连续的嵌套函数吗?

    我知道这就是封闭的领域 但是可以连续调用嵌套的匿名函数吗 假设我有这个 function testing input var testing 0 function testing testing 1 return testing 我们可以有
  • 多列的加权平均值,按组(在 data.table 中)

    这个问题紧接着另一个问题组加权平均值 https stackoverflow com questions 14145859 weighted means by group and column 我想使用创建加权组内平均值data table
  • 自动更新AngularJS中的范围变量

    我目前正在使用 AngularJS 我想从服务返回一个变量 让作用域知道它何时发生变化 为了说明这一点 请查看 www angularjs org 中的示例 连接后端 粗略地 我们可以看到以下内容 var projects firebase
  • 如何使用 ITfoxtec 创建 IdP

    我有兴趣使用 SAML 创建 IdP 身份提供商 是否可以使用 ITfoxtec Nuget 创建完整的 IdP 功能 有 ASP Net C 的示例吗 是的 可以使用 ITfoxtec Identity Saml 2 0 库实施 IdP
  • 使用 WCF 将 Linq-to-Sql 对象发送到服务器时出错

    我正在尝试开发一个具有 2 层的系统 移动客户端和使用 LINQ to SQL 在数据库中存储信息的服务器 我想创建一个在服务器中存储任务的 WCF 服务器 因此它将从客户端接收任务并使用 LINQ to SQL 来存储它 为了执行此服务