0

と呼ばれるテーブルに新しいリポジトリ クラスを追加しようとしていましたが、PersonFieldGroupDomainこれは次のようになります。

ここに画像の説明を入力

基本的に、このテーブルには 2 つのフィールドしかありません。そのため、Entity Framework モデル デザイナーに移動しましたが、データベースからのモデルの更新を使用してこのテーブルをデザイナーに追加できませんでした。表示さえされていません。ただし、それに依存する他のテーブルを見ると、ナビゲーション プロパティとしてしか見ることができません。

したがって、新しいレコードを追加する必要がありますが、他の場合のようにコンテキストから直接アクセスできないため、次のように「アタッチ」メソッドを使用して追加しようとしました。

var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1);
fieldGroupSet.PersonFieldGroupDomainReference.Attach(Domains.Single(t=>t.DomainId == 2));

このコードは機能しませんでした。少なくとも、実際のプロジェクトで使用しているのと同じコンテキスト アセンブリを使用して、LinqPad でテストしました。

この記事は、私がhttp://msdn.microsoft.com/en-us/data/jj592676.aspxを使用できるいくつかの方法について話しているようですが、それらのどれも私のために働いているようには見えませんでした.

実用的なアイデアをいただければ幸いです。

4

1 に答える 1

1

このテーブルは単なる結合テーブルのようです。EF はこれらをデザイナー ビューで非表示にします。サロゲート キーなどをテーブルに追加すると、デザイナーでエンティティとして表示されるようになります。

それを使用するには、次のように簡単にする必要があります

var fieldGroupSet = FieldGroupSets.Single(t => t.FieldGroupSetId == 1);
var domain = Domains.Single(t => t.DomainId == 2);
fieldGroupSet.Domain = domain;
context.SaveChanges();

OPによって編集されました:

私のメモ:回答を編集して申し訳ありませんが、回答としてマークするために、私が使用した実際のコードをあなたのロジックに従って動作させる必要があります:

var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1);
var domain = Domains.Single(t => t.DomainId == 3);
fieldGroupSet.PersonFieldGroupDomain = domain;
SaveChanges();

上記のコードでは、PersonFieldGroupDomain はナビゲーション プロパティなので、プロパティで到達した場合Domainは直接移動するためのタイプです。上記のコードに見られるように、既存のオブジェクトを使用して直接設定し、変更を保存した後、変更がデータベースに永続化され、機能しました!DomainfieldGroupSet.PersonFieldGroupDomainDomain

于 2013-08-07T16:38:31.323 に答える