zoukankan      html  css  js  c++  java
  • 因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 。。。

    因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。

    更新的时候没办法先查一次,所以导致有些唯一性的列没法限制,同一线程内Context唯一。。。。蛋疼啊!!!

    解决:http://www.cnblogs.com/dunitian/archive/2015/05/08/4488224.html

    解决:方案二见最下方

    2015-03-28 19:59:18,823 [10] ERROR log - System.InvalidOperationException: 附加类型“LoT.Model.ArticleTag”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
    在 System.Data.Entity.Core.Objects.ObjectContext.VerifyRootForAdd(Boolean doAttach, String entitySetName, IEntityWrapper wrappedEntity, EntityEntry existingEntry, EntitySet& entitySet, Boolean& isNoOperation)
    在 System.Data.Entity.Core.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClass2.<Attach>b__1()
    在 System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
    在 System.Data.Entity.Internal.InternalEntityEntry.set_State(EntityState value)
    在 System.Data.Entity.Infrastructure.DbEntityEntry`1.set_State(EntityState value)
    在 LoT.Dal.BaseDal`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.DalBaseDal.cs:行号 77
    在 LoT.Service.BaseService`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.ServiceBaseService.cs:行号 63
    在 LoTBlog.Back.Controllers.ArticleTagController.Update(String Name, Int32 Status, Int32 Id) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoTBlog.BackControllersArticleTagController.cs:行号 168
    在 lambda_method(Closure , ControllerBase , Object[] )
    在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
    在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
    在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
    在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
    2015-03-28 19:59:32,329 [14] ERROR log - System.InvalidOperationException: 附加类型“LoT.Model.ArticleTag”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
    在 System.Data.Entity.Core.Objects.ObjectContext.VerifyRootForAdd(Boolean doAttach, String entitySetName, IEntityWrapper wrappedEntity, EntityEntry existingEntry, EntitySet& entitySet, Boolean& isNoOperation)
    在 System.Data.Entity.Core.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClass2.<Attach>b__1()
    在 System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
    在 System.Data.Entity.Internal.InternalEntityEntry.set_State(EntityState value)
    在 System.Data.Entity.Infrastructure.DbEntityEntry`1.set_State(EntityState value)
    在 LoT.Dal.BaseDal`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.DalBaseDal.cs:行号 77
    在 LoT.Service.BaseService`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.ServiceBaseService.cs:行号 63
    在 LoTBlog.Back.Controllers.ArticleTagController.Update(String Name, Int32 Status, Int32 Id) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoTBlog.BackControllersArticleTagController.cs:行号 168
    在 lambda_method(Closure , ControllerBase , Object[] )
    在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
    在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
    在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
    在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
    2015-03-28 19:59:48,906 [12] ERROR log - System.InvalidOperationException: 附加类型“LoT.Model.ArticleTag”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
    在 System.Data.Entity.Core.Objects.ObjectContext.VerifyRootForAdd(Boolean doAttach, String entitySetName, IEntityWrapper wrappedEntity, EntityEntry existingEntry, EntitySet& entitySet, Boolean& isNoOperation)
    在 System.Data.Entity.Core.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClass2.<Attach>b__1()
    在 System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
    在 System.Data.Entity.Internal.InternalEntityEntry.set_State(EntityState value)
    在 System.Data.Entity.Infrastructure.DbEntityEntry`1.set_State(EntityState value)
    在 LoT.Dal.BaseDal`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.DalBaseDal.cs:行号 77
    在 LoT.Service.BaseService`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.ServiceBaseService.cs:行号 63
    在 LoTBlog.Back.Controllers.ArticleTagController.Update(String Name, Int32 Status, Int32 Id) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoTBlog.BackControllersArticleTagController.cs:行号 168
    在 lambda_method(Closure , ControllerBase , Object[] )
    在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
    在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
    在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
    在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
    2015-03-28 20:00:08,891 [14] ERROR log - System.InvalidOperationException: 附加类型“LoT.Model.ArticleTag”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
    在 System.Data.Entity.Core.Objects.ObjectContext.VerifyRootForAdd(Boolean doAttach, String entitySetName, IEntityWrapper wrappedEntity, EntityEntry existingEntry, EntitySet& entitySet, Boolean& isNoOperation)
    在 System.Data.Entity.Core.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClass2.<Attach>b__1()
    在 System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
    在 System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
    在 System.Data.Entity.Internal.InternalEntityEntry.set_State(EntityState value)
    在 System.Data.Entity.Infrastructure.DbEntityEntry`1.set_State(EntityState value)
    在 LoT.Dal.BaseDal`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.DalBaseDal.cs:行号 77
    在 LoT.Service.BaseService`1.UpdateModel(T model) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoT.ServiceBaseService.cs:行号 63
    在 LoTBlog.Back.Controllers.ArticleTagController.Update(String Name, Int32 Status, Int32 Id) 位置 c:UsersDNTDesktopLoTCodeLoTBlogLoTBlog.BackControllersArticleTagController.cs:行号 168
    在 lambda_method(Closure , ControllerBase , Object[] )
    在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
    在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
    在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
    在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
    在 System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
    在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)

    这个是网友提供的其他解决方案,可以试试:

    1.EF 中更新模型的问题,这种错误(因为相同类型的其他实体已具有相同的主键值。)

    在EF经常在更新模型的时候可能会同时操作一个实体几次。

    其实除了SaveChanges外,其它的几次基本都是要查询出一个结果,

    例如更新的时候,我们要查一下这个表中有没有相同的纪录之类的。

    查询完之后,我们再SaveChanges就会出错。

    怎么办呢?

    查询的时候我们用这个方法查询:AsNoTracking() 

    db.Set<实体模型>()
                .AsNoTracking()
                .FirstOrDefault(p => p.x== x)
    

    这个方法返回一个新查询结果,但返回的实体不会在缓存中。也就是EF查完了就不再跟踪了。

    好了。记录一下。打完收功!

    希望能帮到困惑很久的人们!

  • 相关阅读:
    和Mac有关的所有快捷键整理
    Python学习笔记
    在PHP的AWS SDK 的上传功能中指定Content-Type
    Docker 部署 Yapi
    PHP 队列
    数据库设计之一 数据库范式
    docker centos PHP7.2 安装 bcmath数学扩展
    记联调微信支付,调起微信支付之后显示支付验证失败
    记Windows 2012 FTP配置之后 客户端登陆报错
    记一次 MAC 安装 homebrew 报错解决
  • 原文地址:https://www.cnblogs.com/dunitian/p/4374750.html
Copyright © 2011-2022 走看看