簡體   English   中英

數據庫第一個自動類導致CA2214:不要在構造函數中調用可覆蓋的方法

[英]Database first automatic class causes CA2214: Do not call overridable methods in constructors

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:不要在構造函數中調用可覆蓋的方法,但由於這是一個自動生成的代碼,我想我不應該改變它,我應該如何處理這種情況? 提前致謝

您發布的代碼不會引發錯誤,它只是違反了代碼分析規則,並且可以正常工作。 生成的代碼是正確的,並且設計允許延遲加載。 您應該禁止對這些文件發出警告。

在這種情況下,您可以忽略該警告,但如果您想避免它,您可以為每個虛擬屬性手動創建一個私有字段(也可以手動設置setter / getter)。 然后,在構造函數中,設置私有字段,而不是屬性。 這樣,你永遠不會在de構造函數中執行虛擬屬性的setter,這就是警告的原因。

您可以使用“代碼分析”屬性頁中的復選框關閉Visual Studio項目中生成的代碼中的警告:

通過項目的“代碼分析”屬性頁上的“生成代碼的抑制結果”復選框,您可以選擇是否要查看第三方工具生成的代碼中的“代碼分析”警告。 - 如何:抑制生成代碼的代碼分析警告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM