Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用实体框架将数据多对多插入到表中?_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何使用实体框架将数据多对多插入到表中?

C# 如何使用实体框架将数据多对多插入到表中?,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我正在尝试将多对多关系的记录插入到ASP.NET Core 2.1 API,我正在使用postman执行此操作,但出现以下错误: Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参见内部异常 System.Data.SqlClient.SqlException:列名“AfiliadosId”无效 在System.Data.SqlClient.SqlCommand.c.b_u122_u0(任务1结果) 在System.

我正在尝试将多对多关系的记录插入到ASP.NET Core 2.1 API,我正在使用postman执行此操作,但出现以下错误:

Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参见内部异常

System.Data.SqlClient.SqlException:列名“AfiliadosId”无效

在System.Data.SqlClient.SqlCommand.c.b_u122_u0(任务
1结果)
在System.Threading.Tasks.ContinuationResultTaskFromResultTask
2.InnerInvoke()
在System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)
---来自引发异常的上一个位置的堆栈结束跟踪--

在System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task¤tTaskSlot)
---来自引发异常的上一个位置的堆栈结束跟踪--

在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteAsync(IRelationalConnection连接,DbCommandMethod executeMethod,iRelationalDYDictionary
2参数值,CancellationToken CancellationToken)
在Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection连接,CancellationToken CancellationToken)
---内部异常堆栈跟踪结束---
位于Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection连接,CancellationToken CancellationToken) 在Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(DbContext,ValueTuple
2参数,CancellationToken CancellationToken) 在Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState,Func
4操作,Func
4验证成功,CancellationToken CancellationToken) 在Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesSync(IReadOnlyList
1 EntriesToken保存,取消令牌取消令牌)
位于Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesSync(布尔接受ChangesOnSuccess,CancellationToken CancellationToken)
在Microsoft.EntityFrameworkCore.DbContext.SaveChangesSync(布尔值AcceptillChangesOnSuccess,CancellationToken CancellationToken)
位于D:\pruebaEmergia\WebAPI\WebAPI\Controllers\AfiliadoCreditosController.PostAfiliadosCreditos(AfiliadoCreditos-AfiliadoCreditos)中的WebAPI.Controllers.AfiliadoCreditosController.PostAfiliadosCreditos(AfiliadoCreditos-AfiliadoCreditos),第99行
位于Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
在System.Threading.Tasks.ValueTask中
1.get_Result() 在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()中 在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()上 位于Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext上下文) 位于Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态和下一步、范围和范围、对象和状态、布尔值和isCompleted) 在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()中 在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()上 位于Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext) 在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State&Next、Scope&Scope、Object&State、Boolean&isCompleted) 在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()中 在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()上 在Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext HttpContext)中 在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext上下文)中 位于Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.Invoke(HttpContext上下文) 位于Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文) Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求以9999.2762ms 500 text/html完成;字符集=utf-8

我的代码:

阿菲利亚多斯实体

//------------------------------------------------------------
using System;
using System.Collections.Generic;

namespace WebAPI.Models.data
{
    public partial class Afiliados
    {
        public byte Id { get; set; }
        public string Nombre { get; set; }
        public string Apellido { get; set; }
        public byte Cedula { get; set; }
        public string Estado { get; set; }
        public string AdminId { get; set; }
        public ApplicationUser Admin { get; set; }
        public List<AfiliadosCreditos> AfiliadosCreditos { get; set; }
    }
}
DbContext:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebAPI.Models.data;

namespace WebAPI.Models
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<AfiliadosCreditos>().HasKey(x 
                            => new { x.CreditoId, x.AfiliadosId });
            modelBuilder.Entity<AfiliadosCreditos>()
                         .HasOne(x => x.Afiliados)
                         .WithMany(x => x.AfiliadosCreditos)
                         .HasForeignKey(x => x.AfiliadosId);
            modelBuilder.Entity<AfiliadosCreditos>()
                           .HasOne(x => x.Credito)
                           .WithMany(x => x.AfiliadosCreditos)
                           .HasForeignKey(x => x.CreditoId);

            base.OnModelCreating(modelBuilder);
        }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<Afiliados> Afiliados { get; set; }
        public DbSet<Creditos> Creditos { get; set; }
        public DbSet<AfiliadosCreditos> AfiliadosCreditos { get; set; }
    }
}
使用Microsoft.AspNetCore.Identity.EntityFrameworkCore;
使用Microsoft.EntityFrameworkCore;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用WebAPI.Models.data;
名称空间WebAPI.Models
{
公共类ApplicationDbContext:IdentityDbContext
{
公共应用程序DBContext(DbContextOptions选项):基本(选项)
{
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasKey(x
=>新的{x.CreditoId,x.AfiliadosId});
modelBuilder.Entity()
.HasOne(x=>x.Afiliados)
.WithMany(x=>x.AfiliadosCreditos)
.HasForeignKey(x=>x.AfiliadosId);
modelBuilder.Entity()
.HasOne(x=>x.Credito)
.WithMany(x=>x.AfiliadosCreditos)
.HasForeignKey(x=>x.CreditoId);
基于模型创建(modelBuilder);
}
公共数据库集应用程序用户{get;set;}
公共DbSet Afiliados{get;set;}
公共DbSet Creditos{get;set;}
公共DbSet AfiliadosCreditos{get;set;}
}
}
控制器

public async Task<IActionResult> PostAfiliadosCreditos([FromBody] AfiliadosCreditos afiliadosCreditos)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _context.AfiliadosCreditos.Add(afiliadosCreditos);

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateException)
    {
        if (AfiliadosCreditosExists(afiliadosCreditos.CreditoId))
        {
            return new StatusCodeResult(StatusCodes.Status409Conflict);
        }
        else
        {
            throw;
        }
    }

    return CreatedAtAction("GetAfiliadosCreditos", new { id = afiliadosCreditos.CreditoId }, afiliadosCreditos);
}
public异步任务PostAfiliadosCreditos([FromBody]AfiliadosCreditos AfiliadosCreditos)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
_context.AfiliadosCreditos.Add(afiliadosCredit
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebAPI.Models.data;

namespace WebAPI.Models
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<AfiliadosCreditos>().HasKey(x 
                            => new { x.CreditoId, x.AfiliadosId });
            modelBuilder.Entity<AfiliadosCreditos>()
                         .HasOne(x => x.Afiliados)
                         .WithMany(x => x.AfiliadosCreditos)
                         .HasForeignKey(x => x.AfiliadosId);
            modelBuilder.Entity<AfiliadosCreditos>()
                           .HasOne(x => x.Credito)
                           .WithMany(x => x.AfiliadosCreditos)
                           .HasForeignKey(x => x.CreditoId);

            base.OnModelCreating(modelBuilder);
        }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<Afiliados> Afiliados { get; set; }
        public DbSet<Creditos> Creditos { get; set; }
        public DbSet<AfiliadosCreditos> AfiliadosCreditos { get; set; }
    }
}
public async Task<IActionResult> PostAfiliadosCreditos([FromBody] AfiliadosCreditos afiliadosCreditos)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _context.AfiliadosCreditos.Add(afiliadosCreditos);

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateException)
    {
        if (AfiliadosCreditosExists(afiliadosCreditos.CreditoId))
        {
            return new StatusCodeResult(StatusCodes.Status409Conflict);
        }
        else
        {
            throw;
        }
    }

    return CreatedAtAction("GetAfiliadosCreditos", new { id = afiliadosCreditos.CreditoId }, afiliadosCreditos);
}