gpt4 book ai didi

c# - Entity Framework 对象在传递后不更新

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:00 24 4
gpt4 key购买 nike

我正致力于在一个单独的项目中建立一个新的 MVC 支付站点,该站点具有依赖注入(inject)的数据库连接,并像我一样尝试一些新事物。目前,我正在尝试从数据库中加载现有交易,授权卡支付,然后将结果保存回数据库。简单明了,但是当我调用 SaveChanges() 时,没有任何东西被保存,我已经没有什么可以尝试的了。

为此,数据库交互由 CheckoutDataProvider 处理:

public class CheckoutDataProvider : ICheckoutDataProvider
{
private readonly CheckoutEntities _context;

public CheckoutDataProvider(CheckoutEntities _context)
{
this._context = _context;
}



public ITransaction GetTransactionDetails(Guid transactionId)
{
var trans = _context.Transactions.FirstOrDefault(x => x.CheckoutTransactionId == transactionId);
return trans; // It's OK if trans == null, because the caller will expect that.

}

public void AddAuthorization(ITransaction transaction, IAuthorizationHistory history)
{
try
{
var trans = (Transaction)transaction;
var hist = (AuthorizationHistory)history;
trans.AuthorizationHistories.Add(hist);
_context.SaveChanges();
}
catch (DbEntityValidationException ex)
{
throw new InvalidDataException(ex.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage, ex);
}
}
}

TransactionAuthorizationHistory 是 EF 对象,直接对应于数据库表。 CheckoutEntities 是上下文,由 Ninject 注入(inject)。

GetTransactionDetails() 完美运行。我给它 transactionId,我得到对象,然后我使用该数据来运行卡并生成 AuthorizationHistory 类。然后我调用 AddAuthorization() 将其附加到交易并将其保存到数据库。但是新的 AuthorizationHistory 对象和对原始 Transaction 的任何更改都无法保存。

我可以通过检查 _context 对象知道它不知道任何更改,如果我使用 GetTransactionDetails() 进行更改(在它作为接口(interface)返回之前) 他们坚持下去。所以这看起来像是 Actor 阵容的问题(无论如何这让我感到恶心,所以我很想知道这就是问题所在)。

我是否遗漏了一些明显的东西?是否缺少某些东西才能使其正常工作?有没有办法避免在 AddAuthorization() 中进行强制转换?

最佳答案

可能您没有在 GetTransactionDetails 和 AddAuthoritzation 之间共享同一个 DBContext。由于这个原因, Entity Framework 无法跟踪更改。

为 Web 请求设置 DBContext 的范围生命周期,您可以使用 Ninject 和 .InRequestScope() https://github.com/ninject/ninject/wiki/Object-Scopes ,使用此选项时,将在 Web 请求期间使用相同的 DBContext。

关于c# - Entity Framework 对象在传递后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788239/

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