实体框架7数据库优先配置(MVC 6)

时间:2015-12-24 18:49:04

标签: asp.net-core asp.net-core-mvc entity-framework-core

经过长时间的不断斗争,终于想出了如何使用EF7数据库第一种方法使用MVC 6.这是怎么回事:

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项目上。

  1. 我有一个专门用于数据的文件夹。 My Data文件夹应包含所有与数据库相关的内容,例如DbContext,DbClasses。但是,Scaffold在根目录下创建这些文件。如何指定我想要创建这些文件的文件夹?

  2. 在我的工作地点,我可以拥有一个包含50个表格的数据库。但是,如果我只需要访问2,该怎么办?我不想为我的项目添加所有50个表。如何指定我想要的表格?

  3. 在我的数据库中,我可以有一个名为"用户"因为它是一个包含用户的表。但是,脚手架应该创建一个类作为" User",因为它是单个用户,直到它成为List。如何指定正在创建的表的名称?

  4. 谢谢大家的帮助。

2 个答案:

答案 0 :(得分:6)

尝试使用

dnx ef dbcontext scaffold 
    "Server=Server\InstanceName;Database=db;Trusted_Connection=True;"
    EntityFramework.MicrosoftSqlServer 
    --dataAnnotations
    --outputDir Data
    --verbose
    --table dbo.Users

以上所有参数都应该在同一行,但我将长行包裹起来更容易阅读。您可以查看the source code以查看哪些选项支持RC1中的scaffold命令。

请谨慎复制并粘贴ConnectionString中的appsettings.json,因为您Server=Server\\InstanceName;中可能ConnectionStringdnx ef dbcontext scaffold目前只接受Server=Server\InstanceName; System.InvalidOperationException对于Server=Server\\InstanceName; ConnectionString appsettings.json直接复制的-p | --targetProject的使用情况,您会收到 ef错误

其他重要参数是dnx ef dbcontext scaffold,如果您在类库中使用存储库,这一点很重要。如果您在主项目中定义-p命令,并在主项目的目录中启动-t,但您使用-table来引用类库项目。

最后一句话。有时需要从数据库中构建表的子集。从命令行帮助中无法完全清除,但可以多次指定dbo.Usersdbo.Posts)参数。请参阅EF7 wiki中的the note。因此,如果您只想导入两个表PostsUsersdnx ef dbcontext scaffold "Server=Server\InstanceName;Database=db;Trusted_Connection=True;" EntityFramework.MicrosoftSqlServer -a -o Models -v -t dbo.Users -t dbo.Posts 是否具有dotnet ef dbcontext scaffold的外键),那么您可以使用以下语法

dnx ef dbcontext scaffold

更新:在ASP.NET Core RC2及更高版本中,应该使用{{1}}代替{{1}}。

答案 1 :(得分:0)

我还想指定一些表。 我遵循了Oleg的说明,该说明显示了如何在一个命令中导入多个表。 但是,在Visual Studio程序包管理器控制台中的.Net Core 3.1会产生错误- 无法绑定参数,因为参数“ Tables”已多次指定。要为可以接受多个值的参数提供多个值,请使用数组语法。例如,“参数value1,value2,value3”。

因此,Oleg的语法必须更改为- t dbo.Users,dbo.Products,dbo.Orders

我的完整命令是从程序包管理器控制台发出的-

Scaffold-DbContext“数据源=服务器名;初始目录= dbname;用户ID = usn; PWD = mypw;连接超时= 100” Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型-f -t dbo.Users,dbo.Products ,dbo.Orders