数据库第一个自动类导致CA2214:不要在构造函数中调用可重写的方法

本文关键字:构造函数 调用 方法 可重写 第一个 CA2214 数据库 | 更新日期: 2023-09-27 18:14:15

EntityFramework 6.1自动生成的类:

public partial class STUDENT
{
    public STUDENT()
    {
        this.STUDENT_GROUPS = new HashSet<STUDENT_GROUPS>();
    }
    public int ID { get; set; }
    public int PERSON { get; set; }
    ...
    public virtual ICollection<STUDENT_GROUPS> STUDENT_GROUPS { get; set; }
    ...
}

和STUDENT_GROUPS:

public partial class STUDENT_GROUPS
{
    public int ID { get; set; }
    public int GROUPS_GRP { get; set; }
    public int STUDENT { get; set; }
    public virtual STUDENT STUDENT1 { get; set; }
    public virtual GROUPS_GRP GROUPS_GRP1 { get; set; }
}

抛出CA2214:不要在构造函数中调用可重写的方法,但由于这是一个自动生成的代码,我认为我不应该改变它,我应该如何处理这种情况?提前感谢

数据库第一个自动类导致CA2214:不要在构造函数中调用可重写的方法

你发布的代码并没有抛出错误,它只是违反了代码分析规则,并且会正常工作。生成的代码是正确的,并且在设计上允许延迟加载。

在这种情况下,你可以忽略警告,但如果你想避免它,你可以为每个虚拟属性手动创建一个私有字段(也可以手动创建setter/getter)。然后,在构造函数中设置private字段,而不是属性。通过这种方式,您永远不会在构造函数中执行虚拟属性的setter,这就是发出警告的原因。

您可以使用代码分析属性页中的复选框关闭Visual Studio项目中生成的代码中的警告:

"代码"上的"抑制生成代码的结果"复选框项目的"分析"属性页使您可以选择是否使用生成的代码中的代码分析警告第三方工具。如何:抑制生成代码的代码分析警告