如何同时实现公共与私有无参构造函数?EF Code First场景
Entity Framework Code First 支持私有/内部无参构造函数的说明
我刚好对EF Code First的构造函数要求很熟悉,直接给你明确结论和正确的代码示例:
首先,你提到的文档内容是完全正确的:
Entity Framework是否要求实体类具备公共无参构造函数?尽管默认生成的类会自动提供公共无参构造函数,但框架本身并不强制其必须为公共的。必须存在无参构造函数,但它可以是内部或私有的。
EF之所以能识别非公共的无参构造函数,是因为它会通过反射来实例化实体对象,反射可以访问私有/内部成员,所以完全不需要把无参构造函数设为public。这种设计很实用——你可以用带参构造函数约束业务代码必须传入必要参数来创建实体,同时用私有无参构造函数满足EF的要求,避免创建不完整的实体实例。
给你补全正确的代码示例:
public class Product { // 私有无参构造函数,仅EF使用 private Product() { } // 供业务逻辑调用的带参构造函数,保证实体初始化完整性 public Product(string productName, decimal price) { ProductName = productName; Price = price; } // EF需要的实体属性 public int Id { get; set; } public string ProductName { get; set; } public decimal Price { get; set; } }
需要注意的是:如果你完全不写构造函数,C#会自动生成公共无参构造函数;但如果你手动写了带参构造函数,就必须显式定义无参构造函数(不管是私有、内部还是公共),否则EF无法实例化实体。
内容的提问来源于stack exchange,提问作者mko
相关产品推荐
相关产品推荐

