gpt4 book ai didi

c# - Entity Framework 更新时出现错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:59 25 4
gpt4 key购买 nike

更新 Entity Framework 中实体的属性时,我收到错误

The property 'Id' is part of the object's key information and cannot be modified.

现在有了一些 google foo,我开始用 google 搜索这个问题,但是我找到的每个答案确实与实际试图更改实体的 Id 属性的代码有关。

我很清楚不允许我这样做,因此我的代码不会尝试这样做。我仍然收到错误。所有有问题的代码都是从数据库中读取一个实体,然后将 bool 值从 false 更新为 true,然后将其保存回来。

这是更改属性的代码:

public void ConsumeRequestToken(IOAuthContext requestContext)
{
if (requestContext == null) throw new ArgumentNullException("requestContext");

WebApiOAuthRequestToken requestToken = GetRequestToken(requestContext);

UseUpRequestToken(requestContext, requestToken);

_requestTokenRepository.SaveToken(requestToken);
}

static void UseUpRequestToken(IOAuthContext requestContext, WebApiOAuthRequestToken requestToken)
{
if (requestToken.UsedUp)
{
throw new OAuthException(requestContext, OAuthProblems.TokenRejected,
"The request token has already be consumed.");
}

requestToken.UsedUp = true;
}

如您所见,我绝不会触及实体的 ID。

有谁知道为什么会发生此错误?我真的快要放弃了,把 EF 扔出窗外。

编辑

根据 _requestRepository.SaveToken() 方法以及底层 UoW Save() 的要求

public void SaveToken(T token)
{
if (_unitOfWork.RepositoryFor<T>().Get(x => x.Token == token.Token).SingleOrDefault() == null)
_unitOfWork.RepositoryFor<T>().Insert(token);

_unitOfWork.Save();
}

public void Save()
{
context.SaveChanges();
}

编辑 2

_unitOfWork.RepositoryFor().插入( token ):

public virtual void Insert(TEntity entity)
{
DbSet.Add(entity);
}

编辑 3添加了堆栈跟踪

   at System.Data.Objects.EntityEntry.DetectChangesInProperty(Int32 ordinal, Boolean detectOnlyComplexProperties, Boolean detectOnly)
at System.Data.Objects.EntityEntry.DetectChangesInProperties(Boolean detectOnlyComplexProperties)
at System.Data.Objects.ObjectStateManager.DetectChangesInScalarAndComplexProperties(IList`1 entries)
at System.Data.Objects.ObjectStateManager.DetectChanges()
at System.Data.Objects.ObjectContext.DetectChanges()
at System.Data.Entity.Internal.InternalContext.DetectChanges(Boolean force)
at System.Data.Entity.Internal.InternalContext.GetStateEntries(Func`2 predicate)
at System.Data.Entity.Internal.InternalContext.GetStateEntries()
at System.Data.Entity.Infrastructure.DbChangeTracker.Entries()
at BackendService.Models.DatabaseContext.SaveChanges() in c:\Work\Backend\Service\Models\DatabaseContext.cs:line 46

编辑 4添加了 GetAccessToken 方法

WebApiOAuthRequestToken GetRequestToken(IOAuthContext context)
{
try
{
return _requestTokenRepository.GetToken(context.Token);
}
catch (Exception exception)
{
// TODO: log exception
throw Error.UnknownToken(context, context.Token, exception);
}
}

最佳答案

我唯一能想到的是 ConsumeRequestToken 中的上下文和 Save 方法中的上下文是不同的“上下文”和/或上下文的不同“实例”

关于c# - Entity Framework 更新时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17360181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com