私は Entify Framework を初めて使用するので、これはおそらく非常に基本的な質問です。WinForms アプリケーションでは、リストボックスを追加し、選択した内容でデータベースを更新しようとするまでは正常に動作するデータ入力ページがあります。
フォームで、ユーザーはアップロードするファイルを選択し、ファイルにアクセスできる 1 つ以上の部門を指定します。これが私がそれがうまくいくと思った方法です:
using (var ctx = new FCEntities())
{
var batch = new Batch() { Description = txtDescription.Text, Filename = filename, Departments = (System.Data.Objects.DataClasses.EntityCollection<Department>)lstDepartments.SelectedItems };
ctx.AddToBatches(batch);
ctx.SaveChanges();
}
しかし、これがうまくいかなかったとき、私はいくつかの調査を行い、SelectedItems を EntityCollection にキャストできないことを知ったので、元のコレクションから新しいコレクションに項目をコピーし、次のように新しいコレクションを使用することにしました。
using (var ctx = new FCEntities())
{
var departments = new System.Data.Objects.DataClasses.EntityCollection<Department>();
foreach (var department in lstDepartments.SelectedItems)
{
departments.Add((Department)department);
}
var batch = new Batch() {Description = txtDescription.Text, Filename = filename, Departments=departments };
ctx.AddToBatches(batch);
ctx.SaveChanges();
}
これも機能せず、部門でこのエラーが発生しました。行を追加:
「ObjectContext にアタッチされているオブジェクトは、ソース オブジェクトに関連付けられていない EntityCollection または EntityReference に追加できません。」
部門オブジェクトが ObjectContext に関連付けられているように見えないのでわかりませんか? 私は明らかに基本的なものを欠いているので、アドバイスや他の人がこれをどのように行っているかの例へのリンクをいただければ幸いです。