首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在linq to entities中,多对多添加引用

如何在linq to entities中,多对多添加引用
EN

Stack Overflow用户
提问于 2013-05-30 06:59:31
回答 1查看 336关注 0票数 1

我有一个google驱动器的多对多关系,其中文件夹中可以有许多父文件夹和文件和文件夹。如何在我的数据库项目中正确地插入父文件夹已经存在的位置,这里我得到了重复值错误。即时通信使用FE 6.0v。

代码语言:javascript
运行
复制
       var gDoc = new GoogleDoc();
       ///

       do some entity stuff

       ///

       foreach (ParentReference parent in input.Parents)
       {
          var gParent = new GoogleParent();
          ///
          do some entity stuff
          ///
          gDoc.GoogleParents.Add(gParent);

       }

       using (Model2Container dBase = new Model2Container())
       {
            dBase.GoogleDocs.Add(gDoc);
            dBase.SaveChanges();
       }

编辑,添加了一些代码

在分配一个新的参数I would a error之前添加了这个。AcceptChanges无法继续,因为该对象的键值与ObjectStateManager中的另一个对象冲突。在调用AcceptChanges之前,请确保键值唯一。

代码语言:javascript
运行
复制
       GoogleParent gParent = OAuthDBGoogleDrive.getParent(parent.Id);
       if (gParent != null)
            gDoc.GoogleParents.Add(gParent);

在im保存到数据库时添加了这个

代码语言:javascript
运行
复制
      dBase.GoogleDocs.Add(gDoc);
      foreach (GoogleParent parent in gDoc.GoogleParents)
      {
          GoogleParent gparent = dBase.GoogleParents.SingleOrDefault(s => s.Id == parent.Id);
          if (gparent != null)
             dBase.Entry(gparent).State = System.Data.Entity.EntityState.Unchanged;
     }
     dBase.SaveChanges();

仍收到重复错误

编辑2:这似乎是可行的

代码语言:javascript
运行
复制
       using (Model2Container dBase = new Model2Container())
       {
       var gDoc = new GoogleDoc();
       ///

       do some entity stuff

       ///

       foreach (ParentReference parent in input.Parents)
       {
                GoogleParent gParent = OAuthDBGoogleDrive.getParent(parent.Id);
                if (gParent != null)
                {
                    gDoc.GoogleParents.Add(gParent);
                    dBase.GoogleParents.Attach(gParent);
                }
                else
                {
                    gParent = new GoogleParent();
                    ///
                    do some entity stuff
                    ///
                    gDoc.GoogleParents.Add(gParent);
                }
       }   

       dBase.GoogleDocs.Add(gDoc);
       dBase.SaveChanges();
       }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-30 07:06:30

通常,您将DbSet.Attach()数据库中已存在的实体和数据库中不存在的DbSet.Add()实体。这两个函数分别将实体附加到处于UnchangedAdded状态的上下文。如果对象图中的所有实体尚未被上下文跟踪,则它们也会以此状态添加。

因此,如果单个实体处于不正确的跟踪状态,则可能需要更改该实体的跟踪状态。这可以按如下方式完成:

代码语言:javascript
运行
复制
// eg give the entity the unchanged state
context.Entry(myEntity).State == EntityState.Unchanged; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16825309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档