Primeira configuração da Base de dados do Entity Framework 7 (MVC 6)

Depois de uma longa luta constante, finalmente descobriu como usar a primeira abordagem da base de dados EF7 usando MVC 6. É assim que funciona:

App.Impl -> projecto.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"
},

Depois executando o comando do cmd:

dnx ef dbcontext scaffold "Server=ip,port;Database=db;User Id=user;Password=pass;" EntityFramework.MicrosoftSqlServer
Tenho três problemas com isto. No meu projecto Impl.

  1. tenho uma pasta dedicada aos dados. A minha pasta de dados deve conter todas as coisas relacionadas com a base de dados, tais como DbContext, DbClasses. No entanto, o andaime cria estes ficheiros no raiz. Como posso especificar a pasta que quero estes arquivos criados?

  2. no meu local de trabalho, podia ter uma base de dados com 50 mesas. No entanto, e se eu só precisar de acesso a 2? Eu não quero adicionar todas as 50 tabelas para o meu projeto. Como posso especificar quais as mesas que quero?

  3. Na minha base de dados, eu poderia ter uma tabela chamada "usuários" porque é uma tabela que contém usuários. No entanto, o andaime deve estar criando uma classe como" usuário", uma vez que é um único usuário até que se torne uma lista. Como posso especificar o nome da tabela que está sendo criada?

Obrigado a todos pela ajuda.

Author: JohnC1, 2015-12-24

1 answers

Tente usar

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

Todos os parâmetros acima devem estar na mesma linha, mas eu embrulhei a longa linha para lê-la mais facilmente. Você poderá olhar para o código-fonte para ver quais as opções que suportam o comando scaffold no RC1.

Ser cuidadosamente copie e cole o ConnectionString de appsettings.json porque você poderia ter Server=Server\\InstanceName; em ConnectionString, mas dnx ef dbcontext scaffold aceitar atualmente só Server=Server\InstanceName; e você vai ficar System.InvalidOperationException erro sobre o uso de Server=Server\\InstanceName; diretamente copiados de ConnectionString de appsettings.json.

O parâmetro importante adicional é -p | --targetProject, o que é importante se usar o repositório na biblioteca de classes. No caso em que define o comando ef no projecto principal, inicia dnx ef dbcontext scaffold na pasta do projecto principal, mas usa -p para referenciar o projecto da biblioteca de classes.

A última observação. Por vezes, é necessário deslocar um subconjunto das tabelas da base de dados. Não está totalmente claro da ajuda da linha de comando, mas pode-se especificar -t (-table) parâmetro múltiplas vezes . Ver a nota no wiki EF7. Assim, se quiser importar apenas duas tabelas dbo.Users e dbo.Posts (se Posts tem chave estrangeira para Users), então poderá usar a seguinte sintaxe

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

Actualizado: {[34] } deve-se usar dotnet ef dbcontext scaffold em vez de dnx ef dbcontext scaffold em ASP.NET núcleo RC2 e mais tarde.

 6
Author: Oleg, 2016-08-21 15:35:21