数据库中的实体框架6代码优先不生成模型类

时间:2016-09-06 16:11:33

标签: c# entity-framework entity-framework-6

我正在尝试学习实体框架,我遇到了一个问题,即数据库中的Code First没有生成我的模型类。我正在使用此guide来学习。

当我进入第3步,逆向工程师模型时,除了没有创建模型类之外,一切正常。我只看到我的Context类。请注意,我也使用与示例中不同的数据库。我正在使用已经存在的数据库。

要清楚,以下是我执行的步骤:

  1. 右键单击Project并选择Add New Item。
  2. 选择ADO.NET实体数据模型,然后单击添加。
  3. 在“选择模型内容”窗口中,我从数据库中选择“代码优先”(最后一个选项),然后单击“下一步”。
  4. 在“选择您的数据连接”窗口中,我从下拉列表中选择我的连接,然后单击“下一步”。
  5. 在“选择数据库对象和设置”窗口中,我从数据库中选择了几个表(我也尝试选择所有表),然后单击“完成”。
  6. 窗口关闭,几秒钟后我在项目“ModelContext.cs”中得到一个新文件。此文件包含从DbContext派生的类。它包含我选择的所有表的DbSet,但是Visual Studio正在抱怨,因为这些类不存在。根据我对指南的理解,应该生成这些类。

    我的问题听起来与此人提出的question完全相同,但他们没有得到答案。

    其他一些细节:

    • 该项目正在使用.Net Framework 4.6.1,它是一个类库(我也尝试过一个控制台应用程序项目。
    • 我正在使用Entity Framework 6.1.3(查看我安装的NuGet包)。
    • 我正在连接的SQL数据库正在运行SQL Server 2014(标准版)。
    • 我在Visual Studio 2012,2013和2015中尝试了这一点,所有这些都具有相同的最终结果。对于VS 2012和2013,我确实安装了this,以便我可以使用EF 6工具。
    • 我也尝试使用mySQL数据库,但发生了同样的事情。
    • 如果我选择“来自数据库的EF Designer”,那么这些类就会生成。我收到一些关于运行文本模板的安全警告提示,但一切都很顺利。
    • 我已经下载了Entity Framework Power Tools Beta 4扩展,并且能够以这种方式生成类,但它会生成所有内容,而不是让我选择表。
    • 我在家用电脑和电脑上试过这个,我得到的结果相同。

    Thumper询问我试图引入的表的架构。我只是尝试了一个表,我仍然得到相同的结果。

    以下是表架构:

    CREATE TABLE [dbo].[LUCareManagers] (
       [CMName]     VARCHAR (50)  NOT NULL,
       [UserID]     VARCHAR (25)  NULL,
       [CMID]       INT           IDENTITY (1, 1) NOT NULL,
       [Active]     CHAR (1)      NULL,
       [CMEmail]    VARCHAR (50)  NULL,
       [CMPhone]    VARCHAR (12)  NULL,
       [CMFax]      VARCHAR (12)  NULL,
       [Title]      VARCHAR (100) NULL,
       [EmployeeID] VARCHAR (50)  NULL,
    CONSTRAINT [PK_LUCareManagers] PRIMARY KEY CLUSTERED ([CMID] ASC)
    );
    

    以下是生成的DBContext:

    public partial class TestContext : DbContext
    {
        public TestContext()
            : base("name=TestContext")
        {
        }
    
        public virtual DbSet<LUCareManager> LUCareManagers { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.CMName)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.UserID)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.Active)
                .IsFixedLength()
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.CMEmail)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.CMPhone)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.CMFax)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.Title)
                .IsUnicode(false);
    
            modelBuilder.Entity<LUCareManager>()
                .Property(e => e.EmployeeID)
                .IsUnicode(false);
        }
    }
    

0 个答案:

没有答案