经过长时间的不懈努力,终于找到了如何使用MVC 6的EF7数据库优先方法。事情就是这样发展的:
App.Impl->project.json:
"frameworks": {
"net451": { },
"dnx451": { }
},
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final"
},
然后从cmd:运行命令
dnx ef dbcontext scaffold "Server=ip,port;Database=db;User Id=user;Password=pass;" EntityFramework.MicrosoftSqlServer
我面临的3个问题。在我的Impl项目上。
我有一个专用于数据的文件夹。我的数据文件夹应该包含所有与数据库相关的东西,如DbContext、DbClasses。但是,Scaffold在根目录下创建这些文件。如何指定要创建这些文件的文件夹?
在我的工作场所,我可以拥有一个包含50个表的数据库。但是,如果我只需要访问2怎么办?我不想为我的项目添加全部50个表。如何指定我想要的表?
在我的数据库中,我可以有一个名为"Users"的表,因为它是一个包含用户的表。然而,scaffold应该创建一个类作为"User",因为它在成为List之前是一个单独的用户。如何指定要创建的表的名称?
谢谢大家的帮助。
尝试使用
dnx ef dbcontext scaffold
"Server=ServerInstanceName;Database=db;Trusted_Connection=True;"
EntityFramework.MicrosoftSqlServer
--dataAnnotations
--outputDir Data
--verbose
--table dbo.Users
以上所有参数都应该在同一行中,但我将长行换行以便于阅读。您可以查看源代码,了解哪些选项支持RC1中的scaffold
命令。
从appsettings.json
复制和粘贴ConnectionString
时要小心,因为ConnectionString
中可能有Server=Server\InstanceName;
,但dnx ef dbcontext scaffold
目前只接受Server=ServerInstanceName;
,并且在使用从appsettings.json
的ConnectionString
直接复制的Server=Server\InstanceName;
时会出现System.InvalidOperationException
错误。
另外一个重要的参数是-p | --targetProject
,如果您在类库中使用存储库,它非常重要。如果在主项目中定义ef
命令,并且在主项目的目录中启动dnx ef dbcontext scaffold
,但使用-p
来引用类库项目。
最后一句话。有时需要从数据库中构建表子集。从命令行帮助中还不完全清楚,但可以多次指定-t
(-table
)参数。请参阅EF7 wiki中的注释。因此,如果只想导入两个表dbo.Users
和dbo.Posts
(无论Posts
是否具有Users
的外键),则可以使用以下语法
dnx ef dbcontext scaffold
"Server=ServerInstanceName;Database=db;Trusted_Connection=True;"
EntityFramework.MicrosoftSqlServer
-a
-o Models
-v
-t dbo.Users
-t dbo.Posts
更新:在ASP.NET Core RC2及更高版本中,应该使用dotnet ef dbcontext scaffold
而不是dnx ef dbcontext scaffold
。
我还想指定一些表。我遵循了Oleg的解释,展示了如何在一个命令中导入多个表。但是,在Visual Studio软件包管理器控制台中的.Net Core 3.1会出现错误-无法绑定参数,因为参数"Tables"被指定了多次。要向可以接受多个值的参数提供多个值,请使用数组语法。例如,"-参数值1,值2,值3"。
因此,Oleg的语法必须更改为-t dbo。用户,dbo.Products,dbo.Orders
我的完整命令来自Package Manager控制台is-
Scaffold DbContext"数据源=服务器名称;初始目录=数据库名称;用户ID=usn;PWD=mypw;连接超时=100"Microsoft.EntityFrameworkCore.SQL Server-OutputDir Models-f-t dbo。用户,dbo.Products,dbo.Orders
您还可以引用您的appsettings连接字符串。假设你在appsettings.json:中有这样的东西
"ConnectionStrings": {
"Default": "Server=[DB SERVER];Database=[DATABASE];Integrated Security=True;TrustServerCertificate=True;"
}
您可以在脚手架命令中引用该连接字符串,如下所示:
"Name=ConnectionStrings:Default"
而不是这样:
"Server=[DB SERVER];Database=[DATABASE];Integrated Security=True;TrustServerCertificate=True;"