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

时间:2014-07-23 10:36:59

标签: c# entity-framework

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:不要在构造函数中调用可覆盖的方法,但由于这是一个自动生成的代码,我想我不应该改变它,我应该如何处理这种情况? 提前致谢

3 个答案:

答案 0 :(得分:5)

您发布的代码不会抛出错误,它只是违反了代码分析规则,并且可以正常工作。生成的代码是正确的,并且设计允许延迟加载。您应该禁止对这些文件发出警告。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

  

抑制“生成的代码产生结果”复选框   项目的“分析”属性页面使您可以选择是否   想要查看由代码生成的代码的代码分析警告   第三方工具。 -How to: Suppress Code Analysis Warnings for Generated Code