viv*_*una 5 c# ef-code-first entity-framework-core asp.net-core aspnetboilerplate
我试图在两个表中插入记录,但出现异常。您能帮我解决问题吗?
首先,我尝试了以下代码。
await _testRepository.InsertAsync(test);
await _xyzRepository.InsertAsync(xyz);
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这段代码,但是没有任何工作对我有用。
try
{
var test = new Test();
using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
int? tenantId = _unitOfWorkManager.Current.GetTenantId();
using (_unitOfWorkManager.Current.SetTenantId(tenantId))
{
await _testRepository.InsertAsync(test);
var xyz = new XYZ();
await _xyzRepository.InsertAsync(xyz);
await _unitOfWorkManager.Current.SaveChangesAsync();
await uow.CompleteAsync();
}
}
}
catch (Exception ex)
{
throw new UserFriendlyException(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)
例外
信息:
数据库操作预期会影响1行,但实际上会影响0行。自加载实体以来,数据可能已被修改或删除。有关了解和处理乐观并发异常的信息,请参见http://go.microsoft.com/fwlink/?LinkId=527962。
堆栈跟踪:
Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__4.MoveNext()---从发生异常的上一位置开始的堆栈跟踪结束-在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__2.MoveNext()-从上一个堆栈结束跟踪引发异常的位置---在System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.d__32.MoveNext()上的HandleNonSuccessAndDebuggerNotification(任务任务)---从上一个引发异常的位置开始的堆栈跟踪结束-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.d__10.MoveNext()处的.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)---从上次引发异常的位置开始的堆栈跟踪---在System.Runtime。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)上的ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.d__7` 2。MoveNext()-从上一个引发异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore .ChangeTracking.Internal.StateManager.d__61.MoveNext()---从上一个引发异常的位置开始的堆栈结束跟踪---位于System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__59.MoveNext()上的HandleNonSuccessAndDebuggerNotification(任务任务)-从上一个引发异常的位置开始的堆栈结束跟踪--在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime上。Microsoft.EntityFrameworkCore.DbContext.d__48.MoveNext()处的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)-从上次引发异常的位置开始的堆栈跟踪-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在D. \ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line在D:\ Github \ aspnetboilerplate \ src \ Abp。D:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line 214中的D:\ Github \ aspnetboilerplate \ src \ Abp。D:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line 214中的D:\ Github \ aspnetboilerplate \ src \ Abp。
INFO 2018-04-11 13:59:53,439 [3] ore.Mvc.Internal.ControllerActionInvoker-执行操作方法MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.CreateOrEdit(MyCompany.MyProject.Application)与参数([CreateOrEditTestDto]) -ModelState有效WARN 2018-04-11 14:01:48,396 [4] Mvc.ExceptionHandling.AbpExceptionFilter-数据库操作预期会影响1行,但实际上影响0行。自加载实体以来,数据可能已被修改或删除。请参阅 http://go.microsoft.com/fwlink/?LinkId=527962有关了解和处理乐观并发异常的信息。Abp.UI.UserFriendlyException:数据库操作预期会影响1行,但实际上影响0行。自加载实体以来,数据可能已被修改或删除。请参阅 http://go.microsoft.com/fwlink/?LinkId=527962有关了解和处理乐观并发异常的信息。在C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs:Line 205的MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.d__7.MoveNext()从上一个引发异常的位置开始的堆栈跟踪记录--- MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)处的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs中的d__6.MoveNext():
更新资料
我有这个问题的根本原因。
所以基本上我在Entity2上有一个插入触发器,当我在该触发器中注释了查询后,它就可以正常工作了。
此触发器中大约有10个查询,很难知道是哪个引起了问题。所以,请您让我知道如何调试此触发器?
SVP*_*pov 11
我有一个类似的问题。我使用了 EF Core。我的代码的以下更改对我有所帮助。
context.Entry(user).State = EntityState.Added; // added row
this.context.Users.Add(user);
this.context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
UPD:抱歉,问题已通过为 User.Id 添加 Identity 属性解决
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Run Code Online (Sandbox Code Playgroud)
我的代码的问题是,我正在设置primary key value for tables explicitly,not db generated但efcore不知道这一点..所以最后我需要写(ValueGenerateNever)
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//TODO: on add any entity add here the same
modelBuilder.Entity<AdminUser>().Property(e => e.AdminUserId).ValueGeneratedNever();
modelBuilder.Entity<AdminUserLogInLog>().Property(e => e.AdminUserLogInLogId).ValueGeneratedNever();
...........
}
Run Code Online (Sandbox Code Playgroud)
所有表的通用方法
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var item in modelBuilder.Model.GetEntityTypes())
{
var p = item.FindPrimaryKey().Properties.FirstOrDefault(i=>i.ValueGenerated!=Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.Never);
if (p!=null)
{
p.ValueGenerated = Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.Never;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8287 次 |
| 最近记录: |