2015-12-24 53 views
3

长期不断的斗争之后,终于想出了如何使用MVC 6.这是怎么一回事使用EF7数据库第一种方法:实体框架7数据库优先配置(MVC 6)

App.Impl - >项目。 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. 我有一个文件夹专用于数据。我的数据文件夹应该包含所有数据库相关的东西,如DbContext,DbClasses。但是,Scaffold在根目录下创建这些文件。我如何指定我想要创建这些文件的文件夹?

  2. 在我的工作地点,我可以有一个包含50个表格的数据库。但是,如果我只需要访问2呢?我不想为我的项目添加全部50个表格。我怎样才能指定我想要的表格?

  3. 在我的数据库上,我可以有一个名为“Users”的表,因为它是一个包含用户的表。然而,脚手架应该创建一个类为“用户”,因为它是一个用户,直到它成为列表。我如何指定正在创建的表的名称?

谢谢大家的帮助。

+0

'-o Data'或'--output-dir Data'允许指定输出目录,'-t Users'或'--table Users'允许为一个表用户创建类。请参阅[这里](https://github.com/aspnet/EntityFramework/blob/dev/src/EntityFramework.Commands/Commands/Program.cs#L143-L226) – Oleg

+0

关于第2点和第3点,DB第一工具是仍然相当有限。我认为这些类型的功能都在积压之中。 – Shoe

回答

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命令。

小心地在复制和粘贴appsettings.jsonConnectionString,因为你可以在ConnectionStringServer=Server\\InstanceName;,但dnx ef dbcontext scaffold接受目前只有Server=Server\InstanceName;,你将得到的Server=Server\\InstanceName;appsettings.jsonConnectionString直接复制使用System.InvalidOperationException错误

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

最后一句话。有时需要从数据库的表中支撑子集。从命令行帮助中不完全清楚,但可以指定-t-table)多次参数。请参阅EF7 wiki中的the note。因此,如果要导入只有两个表dbo.Usersdbo.PostsPosts是否有外键Users),那么你可以使用下面的语法

dnx ef dbcontext scaffold 
    "Server=Server\InstanceName;Database=db;Trusted_Connection=True;" 
    EntityFramework.MicrosoftSqlServer 
    -a 
    -o Models 
    -v 
    -t dbo.Users 
    -t dbo.Posts 

更新:每个人都应该使用ASP.NET dotnet ef dbcontext scaffold代替dnx ef dbcontext scaffold核心RC2及更高版本。

+0

谢谢奥列格。这回答了我的大部分问题。正如Shoe所说,我想这个功能还是非常有限的,所以我会等待一个更新,看看他们是否实现了一种更改名称的方式,以便让“用户”成为“用户”类。 – JohnC1

+0

@ JohnC1:不客气!我希望能尽快扩大'ef dbcontext scaffold'的可能性。我想例如能够从列表中导入一些特定的表(例如'--table dbo.Users; dbo.Products; dbo.Orders') – Oleg

+0

@ JohnC1:我更新了我的答案,包括如何能够导入多个表:'-t dbo.Users -t dbo.Products - t dbo.Orders' – Oleg

相关问题