2009-03-20 9 views
1

エンティティフレームワークに多対多リレーションシップの一部を構成するエンティティを保存しようとしていて、エラーが発生しています:EntitySetを更新できません 'zRM_OP_defaultloccvgsMapping 'これはDefiningQueryを持ち、要素に現在の操作をサポートする要素が存在しないためです。エンティティフレームワークで多対多リレーションシップオブジェクトを保存する

私のgoogle-fuはこれに弱いですが、私はデザイナーのコードを編集して、手動で挿入を行うストアドプロシージャをフックする必要があるかもしれないことを理解しています。

私のテーブルの構造は次のようになります。

場所: LOCID、 何とか...

カバレッジ: CVGID、 何とか...

loccvgs: LOCID、 CVGID(なしキー)

ヘルプ!

+0

解決策が手助けをする前に、loccvgsテーブルでLOCIDとCVGIDの主キーを作成する必要があります。私はこれがEFに必要なものだと思う。 – jason

答えて

1

私はこの正確な質問がありますが、私は解決策を考え出しました。私はあなたに警告します、それは本当に悪いものです。 - VIDEOID、int型、PK - 何とか

コメント - CommentId、int型、PK - ユーザーID、INT(コメントをしたユーザー) - CommentText

ビデオ :私のような状況で、私は3つのテーブルを持っていますセットアップにエンティティフレームワークのすべてのCommentId、int型、PK

まず、関係を正しくBO - 、文字列

VideoComments - VIDEOID、int型、PK (私の場合はVideoComments)の主列でなければなりません。

つまり、ここに新しいコメントを追加する方法があります。

public VideoDTO AddCommentToVideo(VideoDTO pVideo, CommentDTO pComment) 
     { 
      Video video = context.Videos.Where(v => v.VideoId == 
     pVideo.VideoId).FirstOrDefault(); 
      User user = context.Users.Where(u => u.UserId == 
     pComment.User.UserId).FirstOrDefault(); 
      Comment comment = new Comment(); 
      comment.CommentText = pComment.CommentText; 
      comment.User = user; 
      comment.Videos.Add(video); 
      context.AddToComments(comment); 
      context.SaveChanges(); 

      return pVideo; 
     } 

これは非常に悪いです...ストリームを悪くするのが好きです。私は2つのクエリーを実行して、Entity Frameworkによって要求される完全なオブジェクトを取得するので、新しいコメントを作成することができます。私はこれを行うより良い方法が欲しいですが、私はそれを知らない。多分これが助けになるかもしれない。

+1

私は似たようなことをしたと思います。 EF 1.0はとても悪かったです。 – burnside

+0

私は約1年遅れて応答しましたが、決して遅くはないと思います。 – jason

+0

余りにも遅いが、多分誰かを助ける... [この質問への答えを見て](http://stackoverflow.com/questions/14098600/many-to-many-relationships-not-saving) – UUHHIVS

関連する問題