ASP.net Linq 查询 InvalidOperationException: class '' 没有无参数构造函数

ASP.net Linq Query InvalidOperationException: The class '' has no parameterless constructor

标题几乎解释了它,离开了几个小时,回来做了一些编码,运行它,没有用。所以我几乎清除了它。现在我收到这个错误。 InvalidOperationException:class 'ClientApp.Models.Product' 没有无参数构造函数。它突出显示了这段代码

List<Product> query = (from p in _db.Products
                                   where list.Contains(p.SubCategoryID)
                                   select p).ToList(); 

完整方法

public List<Product> GetProducts()
{
    var _db = new ClientApp.Models.ProductContext();
    IEnumerable<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
    List<Product> query = (from p in _db.Products
                           where list.Contains(p.SubCategoryID)
                           select p).ToList();
    return query;

}

产品class(使用ADO.NET实体)

[Table("Product")]
    public partial class Product
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Product(int productId)
        {
            OrderDetails = new HashSet<OrderDetail>();
        }

        public int ProductID { get; set; }

        public int RetailerID { get; set; }

        public int SubCategoryID { get; set; }


        [Required]
        [StringLength(50)]
        public string ProductName { get; set; }

        [Required]
        [StringLength(255)]
        public string ProductDescription { get; set; }

        [Column(TypeName = "money")]
        public decimal Price { get; set; }

        public int UnitsInStock { get; set; }

        public byte[] Picture { get; set; }

        public bool? IsDiscontinued { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<OrderDetail> OrderDetails { get; set; }

        public virtual ProductSubCategory ProductSubCategory { get; set; }
    }

完整错误码如下: System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.' InvalidOperationException: class 'ClientApp.Models.Product' 没有无参数构造函数。

直到几个小时前,在我进行一些更改之前,它一直运行良好,现在它完全崩溃了。我已经尽可能多地回溯来解决这个问题,在 google 上也找不到任何解决方案...有什么想法吗?

您的错误代码:"The class 'ClientApp.Models.Product' has no parameterless constructor."

尝试设置无参数构造函数。

例如:

 public Product()
 {

 }

要解决您的问题,请更改

public Product(int productId)
{
    OrderDetails = new HashSet<OrderDetail>();
}

public Product()
{
    OrderDetails = new HashSet<OrderDetail>();
}

构造函数中未使用 productId 参数,因此 不需要 在那里。

至于为什么它以前可以工作而现在为什么不工作,我能提供的唯一建议是曾经有一个默认构造函数。要么你不小心删除了它,给它添加了 productId 参数,要么它在 class.

的其他部分声明中

编辑: 此外,如果根本没有构造函数(带或不带参数),那么 C# 编译器将为您添加一个。一个默认的,没有参数,没有任何功能。

Entity Framework 需要一个空的默认构造函数(即没有参数的构造函数),以便在对基础数据库进行查询操作期间初始化实体(在本例中为 Product)。

只需按照其他人的建议添加一个空构造函数,或者从现有构造函数中删除该参数。可访问性对 EF 无关紧要,因此除非您希望能够在代码的其他位置使用默认构造函数初始化 class,否则可以将其设置为私有以防止其他人访问 class一种意想不到的方式。

    private Product()
    {

    }

为什么会这样?

无论出于何种原因,在您的 Product 实体中引入了一个非空构造函数。当存在非空构造函数时,编译器认为您不想公开在未定义特定构造函数时始终存在于 C# classes 上的默认无参数构造函数。由于编译器认为您不再需要默认构造函数,因此它没有为您添加默认构造函数。 EF 需要一个默认的无参数构造函数,不幸的是,它只会在运行时显示自己。