我正在尝试在实体框架中保存构成多对多关系一部分的实体,但出现错误:无法更新 EntitySet 'zRM_OP_defaultloccvgsMapping',因为它有一个 DefiningQuery 并且元素中不存在元素支持当前的操作。
我的 google-fu 在这方面很弱,但我知道我可能必须编辑设计器代码并连接一个存储过程才能手动插入。
我的表结构如下所示:
地点:LOCID,等等。
覆盖范围:CVGID,等等。
loccvgs:LOCID、CVGID(无键)
帮助!
我正在尝试在实体框架中保存构成多对多关系一部分的实体,但出现错误:无法更新 EntitySet 'zRM_OP_defaultloccvgsMapping',因为它有一个 DefiningQuery 并且元素中不存在元素支持当前的操作。
我的 google-fu 在这方面很弱,但我知道我可能必须编辑设计器代码并连接一个存储过程才能手动插入。
我的表结构如下所示:
地点:LOCID,等等。
覆盖范围:CVGID,等等。
loccvgs:LOCID、CVGID(无键)
帮助!
我有这个确切的问题,但我想出了一个解决方案。不过我会警告你,这真的很糟糕。在我的情况下,我有 3 张桌子:
视频 - VideoId , int , PK - blah
Comment - 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 要求的完整对象,以便创建新评论。我想要一种更好的方法来做到这一点,但我不知道。也许这会有所帮助。