【问题标题】:Saving many-to-many relationship objects in entity framework在实体框架中保存多对多关系对象
【发布时间】:2009-03-20 16:10:19
【问题描述】:

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

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

我的表结构是这样的:

地点: 定位, 废话。。

覆盖范围: CVGID, 废话。。

loccvgs: 定位, CVGID(无键)

帮助!

【问题讨论】:

  • 您可能需要在 loccvgs 表上创建 LOCID 和 CVGID 主键,然后我的解决方案才能为您提供帮助。我认为这正是 EF 所需要的。

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


【解决方案1】:

我有这个确切的问题,但我想出了一个解决方案。不过我会警告你,这真的很糟糕。在我的情况下,我有 3 张桌子:

视频 - VideoId , 整数 , PK - 废话

评论 - CommentId,整数,PK - UserId, int(发表评论的用户) - 评论文本,字符串

视频评论 - VideoId,整数,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 要求的完整对象,以便创建新评论。我想要一种更好的方法来做到这一点,但我不知道。也许这会有所帮助。

【讨论】:

  • 我想我最终做了类似的事情。 EF 1.0 太糟糕了。
  • 诚然,我迟到了一年左右没有回复,但我想迟到总比没有好,嗯?
  • 为时已晚,但也许可以帮助某人...Look answer to this question
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2017-01-28
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多