如何重构模型以解决代码警告:“CA2214”和“CA2227”?

时间:2016-06-23 20:15:12

标签: c# entity-framework

在带有Entity Framework 6的MVC 5项目中使用Visual Studio 2013,我使用“ADO实体数据模型”(数据库中的代码优先)将一些模型添加到我的项目中。在这种情况下,表格具有关系。

完成模型向导后,添加模型&我的应用程序的上下文,我在辅助表的构造函数上看到了这些警告属性。这是一个例子。

我的问题是,是否有某种方法可以重构代码以便警告不再存在,或者这是我学会忽略的东西,因为实体框架理解数据库优先的SQL Server关系的方式? / p>

public partial class StudentList
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
            "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public StudentList()
    {
        CreditSlipLogs = new HashSet<CreditSlipLog>();
    }

    // ... code

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
            "CA2227:CollectionPropertiesShouldBeReadOnly")]

    public virtual ICollection<CreditSlipLog> CreditSlipLogs { get; set; }

    }
}

我在MSDN上查看CA2214CA2227的指导。虽然毫无疑问是准确的,但它没有帮助,因为在数据模型向导创建它时,我没有看到任何关于如何解决这个问题的说明。

1 个答案:

答案 0 :(得分:3)

这些不是警告,它们是添加到代码中的属性,以阻止构建警告。 Details for SuppressMessageAttribute

由于EF处理延迟加载的方式,生成的代码会触发这些警告,因此他们将此属性添加到类模板中,因此您不会收到构建警告。