在实体框架中保存多对多关系对象

时间:2009-03-20 16:10:20

标签: c# entity-framework many-to-many

我正在尝试在实体框架中保存构成多对多关系一部分的实体,并且收到错误:无法更新EntitySet'zRM_OP_defaultloccvgsMapping',因为它有一个DefiningQuery并且不存在任何元素支持当前操作的元素。

我的google-fu在这个方面很弱,但我知道我可能需要编辑设计器代码并连接存储过程以手动执行插入。

我的表格结构如下:

位置: LOCID, 等等..

覆盖范围: CVGID, 等等..

loccvgs: LOCID, CVGID(无密钥)

帮助!

1 个答案:

答案 0 :(得分:1)

我有这个确切的问题,但我想出了一个解决方案。我会警告你,这是一个非常糟糕的。在我的情况下,我有3个表:

视频    - VideoId,int,PK    - 等等。

注释    - CommentId,int,PK    - UserId,int(发表评论的用户)    - CommentText,string

VideoComments    - VideoId,int,PK    - CommentId,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强制要求的完整对象,这样我就可以创建一个新的注释。我想要一个更好的方法来做到这一点,但我不知道一个。也许这会有所帮助。