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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Asp.net mvc Web API中多对多关系的.NET核心POST请求问题_Asp.net Mvc_Asp.net Core_Asp.net Web Api_Entity Framework Core_Asp.net Core Webapi - Fatal编程技术网

Asp.net mvc Web API中多对多关系的.NET核心POST请求问题

Asp.net mvc Web API中多对多关系的.NET核心POST请求问题,asp.net-mvc,asp.net-core,asp.net-web-api,entity-framework-core,asp.net-core-webapi,Asp.net Mvc,Asp.net Core,Asp.net Web Api,Entity Framework Core,Asp.net Core Webapi,我正在使用EntityFrameworkCore在.NET Core中制作Web API。我正在尝试向表写入POST请求,它实现了多对多关系,如下所示: public class Agency { public Guid Id { get; set; } public string Name { get; set; } public IList<Book> Books { get; set; } } public c

我正在使用EntityFrameworkCore在.NET Core中制作Web API。我正在尝试向表写入POST请求,它实现了多对多关系,如下所示:

public class Agency
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public IList<Book> Books { get; set; }
    }

public class Author
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public IList<Book> Books { get; set; }
    }

public class Book
    {
        public Guid AgencyId { get; set; }
        public Guid AuthorId { get; set; }
        public string Title { get; set; }
        public string Language { get; set; }   
        public int Pages { get; set; }

        public Agency Agency { get; set; }
        public Author Author { get; set; }
    }

public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) 
            : base(options) { }

        public DbSet<Book> Books { get; set; }
        public DbSet<Agency> Agencies { get; set; }
        public DbSet<Author> Authors { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Book>().HasKey(b => new { b.AgencyId, b.AuthorId});

            modelBuilder.Entity<Book>()
                .HasOne<Agency>(b => b.Agency)
                .WithMany(a => a.Books)
                .HasForeignKey(b => b.AgencyId);

            modelBuilder.Entity<Book>()
                .HasOne<Author>(b => b.Author)
                .WithMany(a => a.Books)
                .HasForeignKey(b => b.AuthorId);
        }
    }

当我提出这个请求时,我得到了数据复制异常。我需要做哪些更改才能使其正常工作?

如果在保存方法期间发生异常,请确保新添加的图书数据的
代理ID
作者ID
不会与以前的数据同时重复

因为您在OnModelCreating中将AgencyId和AuthorId组合的主键设置为Books表

public IActionResult Post(Book model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest("Invalid data.");
            }

            var book = new Book();
            book.Title = model.Title;
            book.Language = model.Language;
            book.Pages = model.Pages;
            book.Author = _repoWrapper.Author.FindByCondition(a => a.Id == model.AuthorId).FirstOrDefault();
            book.Agency = _repoWrapper.Agency.FindByCondition(a => a.Id == model.AgencyId).FirstOrDefault();

            _repoWrapper.Book.Create(book);
            _repoWrapper.Save();
            return Ok();
        }