实体框架7 DbContext scaffold

时间:2015-10-08 13:45:50

标签: c# asp.net entity-framework asp.net-core entity-framework-core

我正在尝试使用ASP.NET 5和Entity Framework 7为现有数据库结构生成DbContext。毫不奇怪,没有很多关于如何轻松完成此操作的文档。另外,我想仅仅支持上下文;有大约900张桌子,我只关心其中的一些,我不需要每个桌子的模型类。

我一直在使用指定herehere的命令,运气不佳。

所以,我想我有两个问题:

  1. 生成的上下文文件位于何处?我在命令提示符下运行命令没有失败,但没有其他事情发生。我知道我至少在正确的地方,因为我可以添加不受支持的属性的旧EF6模型,它给我一个错误,他们不支持。

  2. 是否可以仅生成没有相应模型类的上下文?

4 个答案:

答案 0 :(得分:12)

我的项目生成上下文和模型时遇到了同样的问题。这是我做过的一些事情。

对于下面的1.0 RC1更新

Project.json

  "dependencies": {
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final"
  },

  "commands": {
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }

DNX命令

dnx ef dbcontext scaffold "connectionString" EntityFramework.MicrosoftSqlServer

以下原帖

确保将这些内容添加到project.json文件中:

"dependencies": {
    "EntityFramework.SqlServer": "7.0.0-beta7",
    "EntityFramework.Commands": "7.0.0-beta7",
    "EntityFramework.SqlServer.Design": "7.0.0-beta7"
},
"commands": {
    "ef": "EntityFramework.Commands"
}

使用 dnvm update-self dnvm upgrade 升级dnvm和dnx运行时。我在cmd中运行它。

在项目位置打开cmd.exe(如果您在Windows中,导航到该文件夹​​并在文件夹中右键单击并单击"在此处打开命令窗口")。就我而言,我的数据访问层有一个单独的项目 例如。

C:\Projects\Stackoverflow Example\src\StackoverflowExample.DAL\

然后我开始说:

  

dnx ef dbcontext scaffold"数据源=。;初始   目录=数据库;集成安全性=真" EntityFramework.SqlServer

确保您的项目可以构建。 如果有错误,命令可能无法正常工作。

它生成了所有模型以及上下文(使用每个实体的OnModelCreating()设置)。如果您不需要所有型号,只需删除您未使用的型号。

所以回答你的问题:

  1. 它在您运行dnx ef dbcontext scaffold的文件夹中创建模型和上下文。
  2. 我看不到任何允许你这样做的命令。 在cmd中运行 dnx ef --help 并自己查找。 dnx ef
  3. 我希望这会有所帮助。

答案 1 :(得分:3)

scaffold命令存在一个选项--table(-t):

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2

答案 2 :(得分:0)

对于EF 7,您不再需要使用base初始化,它会导致编译器错误。你需要看看Microsoft EF7 starting docs.

你想要关注新的

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");

        // Visual Studio 2012 | Use the SQL Express instance created by Visual Studio
        // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");
    }

答案 3 :(得分:-4)

我会从现有数据库中尝试代码优先。您可以创建上下文类,如下所示:

public class MyDbContext : DbContext {

        public MyDbContext()
            : base("connectionString") {
            Database.SetInitializer<MyDbContext>(null);
        }

        public virtual DbSet<Table1> Table1s { get; set; }

        public virtual DbSet<Table2> Table2s { get; set; }

        ...
}

您可以仅为所需的表包含DbSet。您可以根据这些模型创建所需的相应模型(表1,表2等)和脚手架控制器和视图。