ASP.NET核心2.2返回“不支持异常:在多对多插入中”集合具有固定大小

wsxa1bj1  于 2023-01-06  发布在  .NET
关注(0)|答案(2)|浏览(102)

我收到**"不支持异常:当我尝试插入到ASP.NET Core 2.2多对多的链接表中时,集合大小固定"**。我可以在SQL Server中手动插入值!
我的实体是:

public class Product
    {
        [key]
        public int Id {get;set;}

        public ICollection<ProductCategory> ProductCategories { get; set; } = new List<ProductCategory>();
    }
public class Category
    {
        [key]
        public int Id {get;set;}

        public string Name { get; set; }

        public ICollection<ProductCategory> ProductCategories { get; set; } = new List<ProductCategory>();

    }
public class ProductCategory
    {
        [Key]
        public int ProductId { get; set; }
        public Product Product { get; set; }

        [Key]
        public int CategoryId { get; set; }
        public Category Category { get; set; }
    }

在DbContext中:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            modelBuilder.Entity<ProductCategory>().HasKey(t => new { t.ProductId, t.CategoryId });

            modelBuilder.Entity<ProductCategory>()
                .HasOne(bc => bc.Product)
                .WithMany(b => b.ProductCategories)
                .HasForeignKey(bc => bc.ProductId);

            modelBuilder.Entity<ProductCategory>()
                .HasOne(bc => bc.Category)
                .WithMany(c => c.ProductCategories)
                .HasForeignKey(bc => bc.CategoryId);

            base.OnModelCreating(modelBuilder);
        }

        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<ProductCategory> ProductCategories {get; set;}

我尝试将记录插入到Product and Category中,插入的记录没有问题。但当我尝试插入链接记录时,我收到**"NotSupportedException:集合具有固定大小"**错误。
插入:

var Electronics = new Category
            {
                Name = "Electronics",
            };

            var Exir = new Product
            {
                Name = "Exir",
            };

            var pc1 = new ProductCategory();

            bc1.Product = Exir ;
            bc1.Category = Electronics;
            Exir.ProductCategories.Add(pc1);

            sqlContext.Categories.Add(Electronics);
            sqlContext.Products.Add(Exir);
            sqlContext.SaveChanges();
rseugnpd

rseugnpd1#

当使用固定大小的数据结构(如空Array)初始化集合属性时,可能会发生此错误。

rekjcdws

rekjcdws2#

如上所述,当用***不可扩展数据结构***初始化***可扩展数据结构***时,会发生这种类型的错误。
在本例中,我所说的可扩展性是指序列是否具有有限数量(如数组)或灵活数量(集合/列表)的元素。
示例:

ICollection<string> collection = { "dummyValue" };

看一下右边的操作符,这是数组类型初始化的一种方式,它是***不可扩展的数据结构***。
解决方案-跟踪向使用者公开的赋值运算符和参数类型。
P.S.有趣的是,这不是一个编译时错误,而是运行时错误,因为在本例中,类型匹配是由于后期绑定而发生的。

相关问题