c# - SaveChangesAsync() 方法不更新数据库
问题描述
我有一个 Web 应用程序:
- 实体框架6.1.3
- 框架 .NET 4.5.1
我将 .NET Framework 从版本4.5.1升级到4.6.2。
从那以后,“System.Data.Entity”方法的“SaveChangesAsync()”不再更新我的数据库。
我找不到是因为 .NET 框架包还是 Entity Framework 6.1.3 和 .NET Framwork 4.6.2 之间的“SaveChangesAsync()”方法的兼容性问题……我迷路了!
以下是一些示例:
服务等级
public async Task<MyActionResponseModel> UpdateSomething(Catalogue catalogue)
{
if (catalogue== null) throw new ArgumentNullException("catalogue is null");
var response = new ActionAddResponse();
var catalogueToUpdate = await _catalogueRepository.GetCatalogueById(catalogue.Id);
var myDate = new DateTime();
if (catalogue.EndDate != null)
{
myDate = catalogue.EndDate.Value;
myDate = myDate.Date.AddHours(23).AddMinutes(59);
}
catalogueToUpdate.Year = catalogue.Year;
catalogueToUpdate.StartDate = catalogue.StartDate;
catalogueToUpdate.EndDate = catalogue.EndDate!= null ? myDate : catalogue.EndDate;
catalogueToUpdate.Tax = catalogue.Tax;
catalogueToUpdate.Online = Convert.ToBoolean(catalogue.Online);
catalogueToUpdate.RefNote = catalogue.RefNote;
await _unitOfWork.SaveAsync();
response.Success = true;
response.Message = string.Format("Catalogue has been update");
return response;
}
UnitOfWork 类
public class UnitOfWork:IUnitOfWork
{
public async Task SaveAsync()
{
await _context.SaveChangesAsync(); // System.Data.Entity
}
}
包配置
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net451" />
<package id="Newtonsoft.Json" version="10.0.1" targetFramework="net451" />
</packages>
我已经检查了我的 async/await 编排,一切似乎都是正确的。那么那里发生了什么?
先感谢您。
解决方案
我终于发现我做错了什么。事实上,我正在使用“Unity”(版本 5.8.6)。上次我在更新 .NET Framework 的同时更新了我的 Unity 包。
我像这样制作了 UnityConfig.cs:
public static void ConfigureUnityContainer(IUnityContainer container)
{
// some other resgistration
container.RegisterType<MyEntities>(new PerResolveLifetimeManager());
}
错误在于经理的类型。正确的是PerRequestLifetimeManager
:
public static void ConfigureUnityContainer(IUnityContainer container)
{
// some other resgistration
container.RegisterType<MyEntities>(new PerRequestLifetimeManager());
}
我的理解PerRequestLifetimeManager
是,容器将在 http 请求中解析对象的同一个实例,同时PerResolveLifetimeManager
标记类型,以便在构建的对象图中重用实例。
总之,随着PerRequestLifetimeManager
, 在不同的 http 请求中,我们将有不同的解析对象。
推荐阅读
- postgresql - Postgres:如何将默认值设置为 max(value) + 1
- php - 如何从多列MySQL中只获取一个
- xml - Google Sheet 的 XPath 查询是否遵循某个标准?
- dax - DAX PowerPivot 函数忽略一周中的特定日期
- java - 为什么 defaultViewInclusion 会忽略 @JsonView 并打印每个字段?
- sql - 使用月/小时选择时遇到问题
- javascript - 从 setInterval 调用方法的两种方式之间的区别
- angularjs - 使用angularJs在离子1中获取设备令牌时出错
- spring-batch - Spring批处理:多线程步骤错误配置
- java - 将 imageProxy 转换为位图时,cameraX 图像已关闭