我正在尝试开发一个具有 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 年前的。有谁知道问题解决了吗?