C# 由于堆栈溢出和访问冲突异常,程序崩溃
问题是,每次尝试链接多对多关系的相关表时,都会出现堆栈溢出和访问冲突异常 以下是我在调试控制台中收到的信息: 信息:Microsoft.Hosting.Lifetime[0] 现在收听: 信息:Microsoft.Hosting.Lifetime[0] 现在收听: 信息:Microsoft.Hosting.Lifetime[0] 应用程序已启动。按Ctrl+C组合键关闭 信息:Microsoft.Hosting.Lifetime[0] 托管环境:开发 信息:Microsoft.Hosting.Lifetime[0] 内容根路径: C:\Users\vynar\source\repos\IndividualProjects\E\u Library\API 堆栈溢出 C:\Users\vynar\source\repos\IndividualProjects\E\u Library\API\bin\Debug\netcoreapp3.1\ELibrary.API.exe(进程14384)已退出,代码为-1073741819C# 由于堆栈溢出和访问冲突异常,程序崩溃,c#,.net,asp.net-core,C#,.net,Asp.net Core,问题是,每次尝试链接多对多关系的相关表时,都会出现堆栈溢出和访问冲突异常 以下是我在调试控制台中收到的信息: 信息:Microsoft.Hosting.Lifetime[0] 现在收听: 信息:Microsoft.Hosting.Lifetime[0] 现在收听: 信息:Microsoft.Hosting.Lifetime[0] 应用程序已启动。按Ctrl+C组合键关闭 信息:Microsoft.Hosting.Lifetime[0] 托管环境:开发 信息:Microsoft.Hosting.L
在VS输出窗口中(仅部分窗口): Microsoft.Hosting.Lifetime:信息:内容根路径:>C:\Users\vynar\source\repos\IndividualProjects\E\U Library\API 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1\System.Net.Security.dll' 引发异常:System.Net.Se``curity.dll中的“System.IO.IOException” 引发异常:System.Net.Security.dll中的“System.IO.IOException” 引发异常:System.Net.Security.dll中的“System.IO.IOException” 引发异常:System.Private.CoreLib.dll中的“System.IO.IOException” 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1\System.Net.Http.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Users\vynar\source\repos\IndividualProjects\E\u Library\API\bin\Debug\netcoreapp3.1\Microsoft.IdentityModel.Protocols.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Users\vynar\source\repos\IndividualProjects\E\u Library\API\bin\Debug\netcoreapp3.1\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1\System.Net.WebSockets.dll' 引发异常:System.Net.Security.dll中的“System.IO.IOException” 引发异常:System.Private.CoreLib.dll中的“System.IO.IOException” 引发异常:System.Private.CoreLib.dll中的“System.IO.IOException” 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Users\vynar\source\repos\IndividualProjects\E\u Library\API\bin\Debug\netcoreapp3.1\Microsoft.IdentityModel.JsonWebTokens.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1\System.Runtime.Numerics.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1\System.Runtime.Serialization.Primitives.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\3.1.1\Microsoft.AspNetCore.WebUtilities.dll' 'ELibrary.API.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\3.1.1\Microsoft.AspNetCore.Http.Extensions.dll' 程序“[14384]ELibrary.API.exe”已退出,代码为-1073741819(0xc0000005)“访问冲突” 可能导致崩溃的代码: 控制器:
[Authorize(Roles = "Admin, Manager")]
[HttpPost("attach")]
public async Task<IActionResult> Attach([FromBody] AuthorBookModel authorBook)
{
var createdLink = await _service.Attach(authorBook.BookId, authorBook.AuthorId);
if (createdLink == null)
{
return BadRequest(authorBook);
}
return CreatedAtAction(nameof(GetAllBooks), createdLink);
}
[Authorize(Roles=“Admin,Manager”)]
[HttpPost(“附件”)]
公共异步任务附加([FromBody]authorBook模型authorBook)
{
var createdLink=wait_service.Attach(authorBook.BookId,authorBook.authord);
if(createdLink==null)
{
返回错误请求(authorBook);
}
返回CreateDataAction(nameof(GetAllBooks),createdLink);
}
服务
public async Task<AuthorBook> Attach(int bookId, int authorId)
{
var book = await _unitOfWork.Books.GetByIdAsync(bookId);
var author = await _unitOfWork.Authors.GetByIdAsync(authorId);
if (book == null && author == null)
{
return null;
}
var authorBook = new AuthorBook() { AuthorId = author.Id, BookId = book.Id };
book.AuthorBooks.Add(authorBook);
author.AuthorBooks.Add(authorBook);
await _unitOfWork.CommitAsync();
return authorBook;
}
公共异步任务附加(int bookId,int authorId)
{
var book=await_unitOfWork.Books.GetByIdAsync(bookId);
var author=await_unitOfWork.Authors.GetByIdAsync(authorId);
if(book==null&&author==null)
{
返回null;
}
var authorBook=new authorBook(){authord=author.Id,BookId=book.Id};
book.AuthorBooks.Add(authorBook);
author.AuthorBooks.Add(authorBook);
wait_unitOfWork.CommitAsync();
返回authorBook;
}
值得一提的是,代码是有效的,数据是插入的
var authorBook = new AuthorBook() { AuthorId = author.Id, BookId = book.Id };
book.AuthorBooks.Add(authorBook);
author.AuthorBooks.Add(authorBook);
这是一种代码气味。为什么要触发在两个不同表中的每个导航属性上保存新的AuthorBook
在这些表中,您只需存储AuthorBookId,即使这样,也不需要这样做。在AuthorBooks表中,仅存储BookId和AuthorId。这样,您就赋予AuthorBooks表管理关系的职责,而不是在每个表中都这样做
试着改变我说的话,然后告诉我是否有错误
这是一种代码气味。为什么要触发在两个不同表中的每个导航属性上保存新的AuthorBook
在这些表中,您只需存储AuthorBookId,即使这样,也不需要这样做。在AuthorBooks表中,仅存储BookId和AuthorId。这样,您就赋予AuthorBooks表管理关系的职责,而不是在每个表中都这样做
试着改变我说的话,然后告诉我是否有错误。这毫无意义。没有可见的递归,stackoverflow需要递归。请提供更多信息-至少是堆栈跟踪。在第一次和第二次查看时,错误不在您显示的代码中。如果没有递归,就不能有stackoverflow。还要删除多余的标记。这个问题与sql server无关(stackoverflow不在服务器上),在web上没有任何相关性。甚至asp.net-core都是不相关的,因为代码中没有代码行,也没有asp.net-core元素。此处可能存在空引用异常,但