【问题标题】:Auto Generating partial classes自动生成部分类
【发布时间】:2013-01-16 20:47:48
【问题描述】:

这是我第一次在 VS2012 中使用 EF,因为到目前为止我一直在使用 2010。我添加了实体框架模型,它添加了 2 个扩展名为 .tt 的文件,我确信 VS2010 中不存在这些文件。在其中之一下,它会生成部分类以匹配实体。但是,我已经在我的应用程序根目录下另一个名为 Entites 的手动创建的文件夹中拥有这些部分类。当它们发生冲突时,这会导致构建问题...

如何阻止它们自动生成,或者如何使它们与我手动创建的部分类一起使用? VS2012 在不询问的情况下执行此操作非常烦人,因为它破坏了我的代码!

自动生成类示例

namespace StatisticsServer
{
    using System;
    using System.Collections.Generic;

    public partial class Statistic
    {
        public int StatID { get; set; }
        public int CategoryID { get; set; }
        public int FranchiseID { get; set; }
        public double StatValue { get; set; }
    }
}

手动创建类的示例

namespace StatisticsServer.Entities
{
    public partial class Statistic
    {
        public static List<Statistic> GetStatisticsSet(int categoryID)
        {
            List<Statistic> statSet = new List<Statistic>();
            using (var context = new StatisticsTestEntities())
            {
                statSet = (from s in context.Statistics where s.CategoryID == categoryID select s).ToList();
            }
            return statSet;
        }
    }
}

【问题讨论】:

  • 你能举一个自动生成的类和你手动创建的类的例子吗?部分类应该一起工作,但您可能创建了重复的属性/方法。
  • 用例子更新问题
  • 我得到的错误是“无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.List”我显然可以通过在类型之前显式指定命名空间来解决这个问题,但我宁愿一开始就没有那些愚蠢的自动生成的类!

标签: asp.net entity-framework visual-studio-2012


【解决方案1】:

确保您手动创建的类与自动生成的类位于同一命名空间中。

否则这两个类将被视为单独的部分类,如果您在同一个调用类中使用两个命名空间,则无法确定您指的是哪个类。

例如,在您的情况下,您可能有:

using StatisticsServer;
using StatisticsServer.Entities;

当您随后在该类中声明 Statistic 类型的对象时,构建将失败,因为 Statistic 类存在于两个命名空间中。

【讨论】:

  • 在 VS2010 中,我通过将“自定义工具命名空间”属性设置为我手动创建的部分类的命名空间来处理这个问题。然后一切正常。我在 2012 年的项目中已经这样做了,如果我从自动生成的文件中删除代码,一切正常。但是很明显,一旦我更新模型,它们就会重新创建并且它再次中断。我什至不想要那些自动生成的类。它们在 2010 年没有出现,那么它们到底是为了什么而被创造出来的?另外,为什么要在与我在 CustomTool 命名空间属性中指定的命名空间不同的命名空间中创建它们?
  • 您使用的是不同版本的实体框架吗? (即VS2010中的EF4,VS2012中的EF5)
  • 我假设我使用的是 EF5,因为它是在 VS2012 中从头开始创建的项目。 2010 年是 EF4
  • 您在哪里更改了自定义工具命名空间设置?在 .tt 文件上还是在 .edmx 文件上?我建议将其设置在 .edmx 文件上,因为这应该会更改其下所有文件的命名空间。
  • 我右键单击 edmx 文件并选择了属性。该设置位于该属性窗口中。只要我从自动生成的代码中删除代码,我手动创建的部分类就可以与 EF 一起正常工作。因此,EF 认为命名空间很好,但由于某种原因,自动生成的命名空间随后在不同的命名空间中创建。
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 2018-08-16
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
相关资源
最近更新 更多