2

3つのデータベーステーブル(映画、レビュー、ユーザー)があります

レビューテーブルには(MemeberID、MovieID、レビューテキスト、レート、ReviewDate)が含まれます(レビューのMemeberIDとMovieIDはメンバーテーブルと映画テーブルのFKです)映画には多くのレビューを含めることができます。映画にレビューを追加する

映画のクラスとメンバーのクラスがありますが、問題があります。レビューを挿入するには、映画とユーザーを参照してリンクする必要がありますが、その方法がわかりません。

このコードはエラーになります:

" The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects. "

これは私のコードです...

public bool InsertNewReview(Movie _TheMovie, Member _TheMember, string _Text, byte _Rate, DateTime _ReviewDate)
    {

       Review ReviewToInsert = new Review()
            {
                MovieID = _TheMovie.MovieID,
                MemberID = _TheMember.MemberID,
                Movie = _TheMovie,
                Member =  _TheMember,
                Rate = _Rate,
                ReviewDate = _ReviewDate,
                ReviewText = _Text
            };

        videoLib.Reviews.AddObject(ReviewToInsert);
        videoLib.SaveChanges();

            return true;

    }

..

Reviewクラスに挿入するデータがさらにあります

画像:こちら

..

およびテーブル:(「すべての列」はデータベーステーブルのフィールドではありません)

画像:こちら

4

2 に答える 2

0

このようにしてみてください

Review ReviewToInsert = videoLib.Reviews.CreateObject();
ReviewToInsert.MovieID = _TheMovie.MovieID
...
...
videoLib.Reviews.AddObject(ReviewToInsert);
videoLib.SaveChanges();
于 2012-11-07T07:36:13.770 に答える
0

私は解決策を得ました、私はMovieID、MemberIDだけを定義する必要があり、それらのオブジェクトを使用しません

そして、try&catchを使用して、同じ行に同じMovieID(fk)とMemberID(fk)があるかどうかを検出します(レビューにデータベース内の独自のIDがないため)

   public bool InsertNewReview(string _MovieID, int _MemberID, string _Text, byte _Rate, DateTime _ReviewDate)
    {
        try
        {
            Review ReviewToInsert = new Review()
            {
                Rate = _Rate,
                ReviewDate = _ReviewDate,
                ReviewText = _Text,
                MovieID = _MovieID,
                MemberID = _MemberID
            };

            videoLib.Reviews.AddObject(ReviewToInsert);
            videoLib.SaveChanges();
            return true;
        }

        catch
        {
            return false;
        }
    }
于 2012-11-07T09:15:51.263 に答える