![](/img/trans.png)
[英]Accessing an implemented abstract property in the constructor causes CA2214: Do not call overridable methods in constructors
[英]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.