- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在发送授权请求,在授权方法 Controller 中,我正在尝试为已通过授权的用户更新实体,但出现错误:
无法跟踪实体类型“SUsers”的实例,因为已跟踪具有键值“{Id: 1}”的另一个实例。附加现有实体时,确保只附加一个具有给定键值的实体实例。
asp 核心 2.2、spa、vue、pwa、jwt、automapper 8.8.4、Microsoft.EntityFrameworkCore 2.2.4
public static class StartupExtension
{
public static IServiceCollection AddDependencies(this IServiceCollection _iServiceCollection, IConfiguration AppConfiguration )
{
#region Data
string ids = System.Guid.NewGuid().ToString();
_iServiceCollection.AddDbContext<BaseDbContext, FakeDbContext>(opt =>
{
opt.UseInMemoryDatabase(ids);
});
_iServiceCollection.AddScoped<IBaseDbContext>(provider => provider.GetService<BaseDbContext>());
#endregion
#region AutoMapper
var config = new MapperConfiguration(cfg => {
cfg.AddMaps("PWSPA.WEB", "PWSPA.BLL");
});
config.AssertConfigurationIsValid();
#endregion
#region Repository
_iServiceCollection.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
_iServiceCollection.AddScoped<IUnitOfWork, UnitOfWork>();
#endregion
#region service
#region mapper service
_iServiceCollection.AddScoped(typeof(IGenericMapperService<,>), typeof(GenericMapperService<,>));
_iServiceCollection.AddScoped(typeof(IMapperService), typeof(MapperService));
#endregion
_iServiceCollection.AddScoped<IAuthService, AuthService>();
#endregion
return _iServiceCollection;
}
}
public class AuthController : BaseApiController
{
private readonly ILogger _log;
private readonly SecuritySettings _config;
private readonly IUserVerify _signInMgr;
private readonly IAuthService _iAuthService;
[AllowAnonymous]
[HttpPost("login")]
public IActionResult Login([FromBody] RequestTokenApiModel model)
{
try
{
SUsersDTO user = null;
user = _iAuthService.SingleOrDefault(u =>
u.WindowsLogin.ToLower() == "guest");
user.WindowsLogin = "guest";
/*
The instance of entity type 'SUsers' cannot be tracked
because another
instance with the key value '{Id: 1}' is already being
tracked. When
attaching existing entities, ensure that only one entity
instance with a
given key value is attached.
*/
countUpdate = _iAuthService.Update(user);
}
catch (ArgumentException ex)
{
return BadRequest(ex.Message);
}
catch (Exception ex)
{
_log.LogError(ex, ex.Message);
return StatusCode(500, ex.Message);
}
}
}
public class AuthService : ServiceBase<SUsers, SUsersDTO>, IAuthService
{
public AuthService(IUnitOfWork uow, IMapperService MapperService) : base(uow, MapperService)
{
Repository.Query().Include(u => u.Role).Load();
}
...
}
public class ServiceBase<TModel, TModelDTO> : IGenericService<TModelDTO> where TModel : class where TModelDTO : class
{
private readonly IUnitOfWork db;
private readonly IMapperService _MapService;
private readonly IGenericRepository<TModel> genericRepository;
private readonly IGenericMapperService<TModel, TModelDTO> genericMapService;
public ServiceBase(IUnitOfWork uow, IMapperService iMapperService)
{
_MapService = iMapperService;
db = uow;
genericRepository = uow.Repository<TModel>();
genericMapService = _MapService.Map<TModel, TModelDTO>();
}
protected virtual Type ObjectType => typeof(TModel);
protected virtual IGenericRepository<TModel> Repository => genericRepository;
protected virtual IMapperService MapService => _MapService;
protected virtual IGenericMapperService<TModel, TModelDTO> Map => genericMapService;
protected virtual IUnitOfWork Database => db;
...
public int Update(TModelDTO entityDto)
{
var entity = Map.For(entityDto);
return Repository.Update(entity);
}
}
public class GenericRepository<TEntity> :
IGenericRepository<TEntity> where TEntity : class
{
private readonly IBaseDbContext _context;
private readonly IUnitOfWork _unitOfWork;
private readonly string errorMessage = string.Empty;
public GenericRepository(IBaseDbContext context, IMapper _iMapper) //: base(context, _iMapper)
{
_context = context;
_unitOfWork = new UnitOfWork(context, _iMapper);
}
public Type ObjectType => typeof(TEntity);
protected virtual IBaseDbContext DbContext => _context;
protected virtual DbSet<TEntity> DbSet => _context.Set<TEntity>();
...
public int Update(TEntity updated)
{
if (updated == null)
{
return 0;
}
DbSet.Attach(updated);
_context.Entry(updated).State = EntityState.Modified;
return Save();
}
...
private int Save()
{
try
{
return _unitOfWork.Commit();
}
catch (DbUpdateException e)
{
throw new DbUpdateException(e.Message, e);
}
}
public class UnitOfWork : IUnitOfWork
{
private readonly IBaseDbContext _dbContext;
private readonly Dictionary<Type, object> _repositories = new Dictionary<Type, object>();
private readonly IMapper _iMapper;
public Dictionary<Type, object> Repositories
{
get => _repositories;
set => Repositories = value;
}
public UnitOfWork(IBaseDbContext dbContext, IMapper _iMapper)
{
_dbContext = dbContext;
this._iMapper = _iMapper;
}
public IGenericRepository<TEntity> Repository<TEntity>() where TEntity : class
{
if (Repositories.Keys.Contains(typeof(TEntity)))
{
return Repositories[typeof(TEntity)] as IGenericRepository<TEntity>;
}
IGenericRepository<TEntity> repo = new GenericRepository<TEntity>(_dbContext, _iMapper);
Repositories.Add(typeof(TEntity), repo);
return repo;
}
public EntityEntry<TEintity> Entry<TEintity>(TEintity entity) where TEintity : class
{
return _dbContext.Entry(entity);
}
...
}
public int Update(TEntity updated)
{
if (updated == null)
{
return 0;
}
/*
on line DbSet.Attach(updated) an exception occurs
*/
DbSet.Attach(updated);
_context.Entry(updated).State = EntityState.Modified;
return Save();
}
public int Update(TModelDTO entityDto)
{
var entity = Map.For(entityDto);
return Repository.Update(entity);
}
实体更新
无法跟踪实体类型“SUsers”的实例,因为已跟踪具有键值“{Id: 1}”的另一个实例。附加现有实体时,确保只附加一个具有给定键值的实体实例。
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap1.ThrowIdentityConflict(InternalEntityEntry 条目)
1.Add(TKey 键,InternalEntityEntry 条目, bool 更新重复) 在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.StartTracking(InternalEntityEntry 条目) 在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState,EntityState newState,Boolean acceptChanges) 在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintAction(EntityEntryGraphNode 节点, bool 力) 在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode 节点,TState 状态,Func
在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap3 handleNode)
1.Update(TEntity 已更新)在 D:\repos\asp-core-2.2-clean2\PWSPA.DAL\Repositories\GenericRepository.cs:line 99 在 PWSPA.BLL.Services.ServiceBase`2.Update(TModelDTO entityDto) 在 D:\repos\asp-core-2.2-clean2\PWSPA.BLL\Services\ServiceBase.cs:line 208 在 D:\repos\asp-core-2.2-clean2\PWSPA.WEB\API\AuthController.cs:line 90 中的 PWSPA.API.Controllers.AuthController.Login(RequestTokenApiModel 模型)
在 Microsoft.EntityFrameworkCore.DbContext.SetEntityState[TEntity](TEntity 实体,EntityState entityState)
在 PWSPA.DAL.Repositories.GenericRepository
最佳答案
您在这里犯了一个新手错误,基本上只是转储了您能想到的所有信息,然而,具有讽刺意味的是,您错过了唯一真正重要的部分:_iAuthService
背后的代码。仅发布与问题直接相关的代码。如果我们需要其他东西,我们可以随时提出要求。并且,就此而言,发布与该问题直接相关的所有 代码。如果错误来自您编写的自定义服务类,请发布该服务类。
也就是说,您遇到的错误归结为以下情况。在某个时候,您查询一个实体,该实体将其添加到上下文的对象跟踪中。然后,您稍后尝试更新该实体的非跟踪版本,而不是您查询的版本。这可能发生在从模型绑定(bind)器接收它(即它是 Action 的参数),从字面上用 new
实例化一个,或者简单地使用上下文的不同实例来检索它(并保存它到另一个实例)。
根据你提供的代码,我的钱在最后一个。您可能没有在您的服务类中正确处理上下文,并且您正在让实体从上下文的一个实例进行修改并尝试使用上下文的不同实例更新它。您的上下文应该始终被注入(inject),以确保您在整个生命周期(请求)中始终使用相同的实例。换句话说,如果您正在执行 using (var context = new MyContext())
或任何 new MyContext()
,那是您的问题。
关于c# - 无法跟踪实体类型 '' 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582494/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!