c# - 如何重构模型以解决代码警告 : "CA2214" and "CA2227"?

标签 c# entity-framework

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

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

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

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 上寻找有关 CA2214 的指导和 CA2227 .虽然毫无疑问是准确的,但它没有帮助,因为当它由数据模型向导创建时,我没有看到任何关于如何解决这个问题的说明。

最佳答案

这些不是警告,它们是添加到代码中以防止生成警告的属性。 Details for SuppressMessageAttribute .

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

关于c# - 如何重构模型以解决代码警告 : "CA2214" and "CA2227"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38000990/

相关文章:

entity-framework - 插入时出现DbUpdateConcurrencyException

linq - 无法转换为 system.guid

c# - 如何对具有相同属性名称的多个属性使用 select 方法

c# - 如何以编程方式备份​​ SQL Server 数据库(mdf)以便以后按行导入?

c# - 执行 LambdaExpression 并获取返回值作为对象

c# - 显示 Entity Framework 为插入/更新生成的 SQL

c# - 使用序列化在 Entity Framework 中的两个 ObjectContext 之间复制实体

C# 字符串拆分 - 索引越界

c# - 生成复杂(非凸)多面体 UV 贴图

.net - 使用数据库优先的具有描述属性的 Entity Framework 5 枚举