ADO.NET实体数据模型自动生成的代码违反了代码分析CA2214

时间:2013-01-14 18:21:19

标签: entity-framework ado.net visual-studio-2012 code-analysis

在MVC 3解决方案中,在VS 2012下,运行代码分析后收到此类消息听起来很奇怪:

enter image description here

奇怪的是因为“DO NOT”分析中提到的类是由VS本身(而不是我)生成的。

要重现这一点,您可以:

  1. ADO.NET实体数据模型添加到您的解决方案
  2. 将您的数据库表(已存在于SQL Server中)添加到您的图表中,
  3. 重建解决方案,添加控制器和cshtml视图(这些视图会自动生成)。
  4. 从ANALYZE菜单运行代码分析。
  5. 所以,问题是,我们能做什么:重构自动生成的代码或忽略此消息?

    下面是违反规则CA2214的自动生成类的示例:

    //------------------------------------------------------------------------------
    // <auto-generated>
    //    This code was generated from a template.
    //
    //    Manual changes to this file may cause unexpected behavior in your application.
    //    Manual changes to this file will be overwritten if the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace Backoffice.Entities
    {
        using System;
        using System.Collections.Generic;
    
        public partial class BR_SIMUL_Supermarket_Product
        {
            public BR_SIMUL_Supermarket_Product()
            {
                this.BR_SIMUL_Supermarket_Product_Price = new HashSet<BR_SIMUL_Supermarket_Product_Price>();
            }
    
            public int product_id { get; set; }
            public int category_id { get; set; }
            public string product_name { get; set; }
            public string product_measure { get; set; }
            public bool product_active { get; set; }
            public virtual BR_SIMUL_Supermarket_Category BR_SIMUL_Supermarket_Category { get; set; }
            more stuff here...
    

3 个答案:

答案 0 :(得分:2)

以下是我永久解决的问题:http://chuckbeasley.com/blog/?p=42200

答案 1 :(得分:1)

你应该随意压制这些。有关更多详细信息,请查看Entity Framework codeplex网站上的此discussion

答案 2 :(得分:1)

这是设计允许延迟加载。当您通过DbContext访问该类时,尽管有警告,但它不会在运行时失败。您应该仅在这些文件中禁止警告。