1

Entity Framework、SQL、および C# を使用しています。

私はClientと呼ばれるテーブルとclients_phoneと呼ばれるテーブルを持っています。

Xtragrid を含むフォームがあり、BindingSource を使用して IQueryable をグリッドにバインドします。

myBindingSource = new BindingSource();
myBindingSource.DataSource = clients;  //Clients it is the IQueryable<Client>
myBindingSource.DataMember = "clients_phone";
myBindingSource.AllowNew = true;

次に、クライアントに新しい client_phone を追加したいと思います。これを行うには、New Client() を作成し、電話を追加します。

clients newclient = objContext.CreateObject<clients>();

newclient.clients_phone = newClients_Phone;

objContext.AddObject("Clients", newclient);

最後に、ObjectContext に新しい client_phone を追加しましたが、Xtrag の client_phone が表示されません。

何が起こるかのアイデアはありますか??。

ありがとう

4

3 に答える 3

2

ルーカス B は正しいです。すべての新しい Client と Clients_phone を追加する作業が終わったら、データをデータベースに保存するために SaveChanges() メソッドを呼び出す必要があります。

最初にクライアントを作成してから、更新を行ってさらに client_phone エントリを追加する必要があるかどうかなど。SaveChanges() メソッドを一度も呼び出さない場合、何をしてもデータベースに保存されません。

于 2011-08-10T15:42:20.063 に答える
1

オブジェクトを保存してコミットしようとしましたか?

objContext.SaveChanges(true);

objContext.AcceptAllChanges();
于 2010-07-14T20:05:31.593 に答える
0

SaveChanges()を実行しましたが、回避策と考えています。

これの欠点: ユーザーがアクションをキャンセルすると、新しいオブジェクトが DB に作成されます。

ユースケース:「人を作る」

  1. ユーザーは、「Create person」という名前のメニュー項目 (またはボタンなど) を選択します (たとえば、新しいユーザーが GridView コントロールに表示されます - SaveChanges() が呼び出されます)。
  2. ユーザーは名、姓などを入力します。
  3. しかし、その後、ユーザーは、その人を作成する必要がないことに気付きます (たとえば、ユーザーは、昨日すでにその人を作成したことを覚えています)。
  4. ユーザーは保存ボタン(メニュー項目など;-))を押さず、「キャンセル」メニュー項目(またはボタンなど)を使用します-したがって、DBに孤立した人物が存在します

その他のアプローチ: 新しい人 (まだコミットされていない) を GridView コントロールに追加するには、DataSource を「現在の人 + 新しい人」に設定します。

    private object GetBindingList(ObjectSet<Person> contextObjects, Person newObject)
{
  List<Person> list = new List<Person>();

  list.AddRange(contextObjects);
  list.Add(newObject);

  return list;
}

使用法:

PersonsBindingSource.DataSource = GetBindingList(Context.PersonSet, newPerson);

しかし、これには欠点があります。最初にしか機能しません...したがって、次のようにする必要があります。

PersonsBindingSource.DataSource = GetBindingList(Context.PersonSet, newPerson);
Context.PersonSet = Populate with persons from PersonsBindingSource.DataSource // ;-)

しかし、なぜ contextObjects.AddObject(newObject); なのですか? 機能しない (新しいアイテムは GridView に表示されません - 問題は、他のオブジェクトへの外部キーを持たないオブジェクトでのみ発生します)

また、 SaveChanges()を呼び出す場合にのみ機能します。

PersonsBindingSource.DataSource = Context.PersonSet.Execute(MergeOption.AppendOnly);
于 2011-11-16T15:10:32.443 に答える