モバイルクライアントとLINQ to SQLを使用してデータベースに情報を格納するサーバーの2つの層を持つシステムを開発しようとしています。 タスクをサーバーに格納するWCFサーバーを作成して、クライアントからタスクを受け取り、LINQ to SQLを使用してそのタスクを格納するようにします。WCFを使用してLinq-to-Sqlオブジェクトをサーバーに送信するときのエラー
このサービスを行うために、私はdatacontextを使用できるように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);
}
として、私は新しいオブジェクトを作成しています。それを埋め込み、それを私のサービスに送ります。それはそれを取得して保存します。理論的にはうまくいくはずです。
クライアントはオブジェクトを作成してサーバーに送信できます。サーバは要求を受信すると、それが再びオブジェクトを構築しようとしたが、その後私は(VS2010から自動的に作成された)この方法でSystem.Data.Linq.ForeignKeyReferenceAlreadyHasValueExceptionを取得 :
[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私はそれをデバッグすることすらできません。私のメソッドが呼び出される前にエラーが発生しています。おそらくリクエストをアンマーシャリングします。
何が起こるか?どこから見たらいいですか?それは設定上の問題でしょうか?
は、 オスカー
編集ありがとう:彼らはそれを伝えるこのリンクSerializing Linq2Sql over Wcf - bug or misunderstanding?は、バグですが、それは1年前からある見つけました。誰かがそれが解決されたかどうか知っていますか?
こんにちは、お返事ありがとうございます!私は既にSeverityIDを設定しようとしましたが、助けにはなりませんでした。遅延ロードを無効にして、できるだけ早くあなたに連絡していきます! – JSBach
こんにちは、試しましたが、実際には役に立たなかった。 – JSBach
LINQ to SQLデザイナーによって生成されたコードには、すべてのスカラープロパティのDataMemberシリアル化属性が含まれていますが、このコードは自動的に生成されます。クラスのプロパティではありません。シリアル化モードを「単方向」に設定してもよろしいですか?それ以外の場合は、Severityプロパティがデシリアライズされることはありません。 SeverityIDプロパティのみ。 – Josh