Compartilhar via


Passo a passo: Gerar F# tipos de um arquivo de esquema edmx para (F#)

Esse guia passo a passo para F# 3.0 mostra como criar tipos para dados que são representados pelo Modelo de Dados de Entidade (EDM), o esquema para o qual é especificado em um arquivo de .edmx.Esse guia também mostra como usar o provedor do tipo EdmxFile.Antes de começar, considere se um provedor de tipo SqlEntityConnection é uma opção mais apropriada do provedor de tipo.O provedor de tipo SqlEntityConnection funciona melhor para cenários onde você tem um banco de dados vivo ao qual você pode se conectar durante a fase de desenvolvimento do seu projeto, e você não se importa em especificar a cadeia de conexão em tempo de compilação.No entanto, esse provedor de tipo também é limitado na medida em que expõe tanta funcionalidade de banco de dados quanto o provedor de tipo EdmxFile.Além de isso, se você não tiver uma conexão de banco de dados vivo para um projeto de banco de dados que usa o Modelo de Dados de Entidade, você pode usar o arquivo .edmx para codificar contra o banco de dados.Quando você usa o provedor de tipo EdmxFile, o compilador F# executa EdmGen.exe para gerar os tipos que ele fornece.

Esse guia passo a passo ilustra as seguintes tarefas, que você deve executar nesta ordem para que o guia seja bem sucedido:

  • Criando um arquivo EDMX

  • Criando o projeto

  • Localizando ou criando a cadeia de conexão para o Modelo de Dados de Entidade

  • Configurando o provedor de tipo

  • Consultando os dados

  • Chamando um procedimento armazenado

Criando um arquivo EDMX

Se você já tiver um arquivo EDMX, você pode pular esta etapa.

Para criar um arquivo EDMX

  • Se você ainda não tiver um arquivo EDMX, você pode seguir as instruções em Início rápido do ADO.NET Entity Framework para criar um Modelo de Dados de Entidade e um arquivo EDMX para um banco de dados.Como alternativa, você pode consultar as instruções no final desse guia na etapa Configurando o Modelo de Dados de Entidade.

Criando o projeto

Nesta etapa, você cria um projeto e adiciona referências apropriadas a ele para usar o provedor de tipo EDMX.

Para criar e configurar um projeto de F#

  1. Feche o projeto anterior, crie outro projeto, e nomei-o SchoolEDM.

  2. No Gerenciador de Soluções, abra o menu de atalho para Referências, e então clique em Adicionar Referência.

  3. Na área de Assemblies, clique no nó Estrutura.

  4. Na lista de assemblies disponíveis, escolha os assemblies System.Data.Entity e System.Data.Linq, e então clique no botão Adicionar para adicionar referências a esses assemblies ao seu projeto.

  5. Na área de Assemblies, selecione o nó Extensões.

  6. Na lista de extensões disponíveis, adicione uma referência ao assembly FSharp.Data.TypeProviders.

  7. Adicione o seguinte código para abrir os namespaces apropriados.

    open System.Data.Linq
    open System.Data.Entity
    open Microsoft.FSharp.Data.TypeProviders
    

Localizando ou criando a cadeia de conexão para o Modelo de Dados de Entidade

A cadeia de conexão para o Modelo de Dados de Entidade (cadeia de conexão EDMX) inclui não somente a cadeia de conexão para o provedor de banco de dados mas também informações adicionais.Por exemplo, a cadeia de conexão EDMX para um banco de dados simples do SQL Server é parecida com o seguinte código.

let edmConnectionString = "metadata=res://*/;provider=System.Data.SqlClient;Provider Connection String='Server=SERVER\Instance;Initial Catalog=DatabaseName;Integrated Security=SSPI;'"

Para obter mais informações sobre cadeias de conexão EDMX, consulte Connection Strings.

Para localizar ou criar a cadeia de conexão para o Modelo de Dados de Entidade

  • Cadeias de conexão EDMX podem ser difíceis de ser geradas manualmente, então você pode economizar tempo gerando-as programaticamente.Se você souber a sua cadeia de conexão EDMX, você pode ignorar esta etapa e simplesmente usar essa cadeia na próxima etapa.Se não, use o seguinte código para gerar a cadeia de conexão EDMX de uma cadeia de conexão de banco de dados que você fornece.

    open System
    open System.Data
    open System.Data.SqlClient
    open System.Data.EntityClient
    open System.Data.Metadata.Edm
    
    let getEDMConnectionString(dbConnectionString) =
        let dbConnection = new SqlConnection(connectionString)
        let resourceArray = [| "res://*/" |]
        let assemblyList = [| System.Reflection.Assembly.GetCallingAssembly() |]
        let metaData = MetadataWorkspace(resourceArray, assemblyList)
        new EntityConnection(metaData, dbConnection)
    

Configurando o provedor de tipo

Nesta etapa, você cria e configura o provedor de tipo com a cadeia de conexão EDMX, e você gera tipos para o esquema que é definido no arquivo .edmx.

Para configurar o provedor de tipo e gerar tipos

  1. Copie o arquivo .edmx que você gerou na primeira etapa deste guia para a pasta do seu projeto.

  2. Abra o menu de atalho para o nó do projeto no seu projeto F#, clique em Adicionar Ítem Existente, e então escolha o arquivo .edmx para ser adicionado ao seu projeto.

  3. Insira o código a seguir para ativar o provedor de tipo para o seu arquivo .edmx.Substitua Servidor\Instância pelo nome do seu servidor que está executando o SQL Server e o nome da sua instância, e use o nome do seu arquivo .edmx da primeira etapa nesse guia.

    type edmx = EdmxFile<"Model1.edmx", ResolutionFolder = @"<folder that contains your .edmx file>>
    
    let edmConnectionString =
        getEDMConnectionString("Data Source=SERVER\instance;Initial Catalog=School;Integrated Security=true;")
    let context = new edmx.SchoolModel.SchoolEntities(edmConnectionString)
    

Consultando os dados

Neste passo, você usa expressões de consulta do F# para consultar o banco de dados.

Para consultar os dados

  • Insira o código a seguir para consultar os dados no modelo de dados de entidade.

    query { for course in context.Courses do
            select course }
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    query { for person in context.Person do
            select person }
    |> Seq.iter (fun person -> printfn "%s %s" person.FirstName person.LastName)
    
    // Add a where clause to filter results
    query { for course in context.Courses do
            where (course.DepartmentID = 1)
            select course)
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    // Join two tables
    query { for course in context.Courses do
            join (for dept in context.Departments -> course.DepartmentID = dept.DepartmentID)
            select (course, dept.Name) }
    |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
    

Chamando um procedimento armazenado

Você pode chamar procedimentos armazenados usando o provedor de tipo EDMX.No procedimento a seguir, o banco de dados da Escola contém um procedimento armazenado, UpdatePerson, que atualiza um registro, dado novos valores para as colunas.Você pode usar esse procedimento armazenado porque ele está expostos como um método para o tipo DataContext.

Para chamar um procedimento armazenado

  • Adicione o seguinte código para atualizar registros.

    // Call a stored procedure.
    let nullable value = new System.Nullable<_>(value)
    
    // Assume now that you must correct someone's hire date.
    // Throw an exception if more than one matching person is found.
    let changeHireDate(lastName, firstName, hireDate) =
    
        query { for person in context.People do
                where (person.LastName = lastName &&
                       person.FirstName = firstName)
                exactlyOne }
        |> (fun person ->
                context.UpdatePerson(nullable person.PersonID, person.LastName,
                    person.FirstName, nullable hireDate, person.EnrollmentDate))
    
    changeHireDate("Abercrombie", "Kim", DateTime.Parse("1/12/1998"))
    |> printfn "Result: %d"
    

    O resultado é 1 se houver êxito.Observe que exactlyOne é usado na expressão de consulta para garantir que apenas um resultado é retornado; caso contrário, uma exceção é lançada.Além de isso, para trabalhar mais facilmente com valores anuláveis, você pode usar a função simples nullable que é definida no código para criar um valor anulável de um valor comum.

Configurando o Modelo de Dados de Entidade

Você deve concluir este procedimento somente se você deseja saber como gerar um Modelo de Dados de Entidade completo de um banco de dados e não tem um banco de dados com o qual testar.

Para configurar o Modelo de Dados de Entidade

  1. Na barra de menu, clique em SQL, Editor Transact-SQL, Nova Consulta para criar um banco de dados.Caso seja solicitado, especifique sua instância e o seu servidor do banco de dados.

  2. Copie e cole o conteúdo do script do banco de dados que cria o banco de dados do Aluno, como Creating the School Sample Database descreve.

    As próximas etapas nesse guia são baseados no ADO.NET Entity Data Model Quickstart.

  3. Execute o script SQL clicando no botão da barra de ferramentas com o símbolo do triângulo ou precionando as teclas Ctrl+Q.

  4. No Gerenciador de Servidores, abra o menu de atalho para Conexões de Dados, clique em Adicionar Conexão, e então digite o nome do servidor de banco de dados, o nome da instância, e o banco de dados da Escola.

  5. Crie um projeto C# ou de Aplicativo de Console do Visual Basic, abra o menu de atalho, clique em Adicionar Novo Item e clique em Modelo de Dados de Entidade ADO.NET.

    O assistente do Modelo de Dados de Entidade abre.Usando esse assistente, você pode escolher como você deseja criar o Modelo de Dados de Entidade.

  6. Em baixo de Escolha os Conteúdos do Modelo, selecione a caixa de seleção Gerar do banco de dados.

  7. Na próxima página, escolha o banco de dados recém-criado da Escola como a conexão de dados.

    Esta conexão deve se parecer com <servername>.<instancename>.School.dbo.

  8. Copie a sua cadeia de conexão de entidade para a área de transferência porque essa cadeia pode ser importante depois.

  9. Certifique-se de que a caixa de seleção para salvar a cadeia de conexão de entidade para o arquivo App.Config está selecionada, e tome nota do valor da cadeia na caixa de texto, o que pode ajudá-lo a encontrar a cadeia de conexão posteriormente, se necessário.

  10. Na próxima página clique em Tabelas e Funções e Procedimentos armazenados.

    Escolhendo esses nós de nível superior, você escolhe todas as tabelas, procedimentos armazenados, e funções.Você também pode ecolhê-los individualmente, se você desejar.

  11. Certifique-se de que as caixas de seleção para as outras configurações estão selecionadas.

    A primeira caixa de seleção Pluralizar ou singularizar nomes de objetos gerados indica se altera formas singular para o plural para condizer com convenções de nomeação de objetos que representam as tabelas do banco de dados.A caixa de seleção Incluir colunas de chave estrangeira no modelo determina se inclui campos para os quais o objetivo é se a juntar a outros campos nos tipos de objeto que são gerados para o esquema do banco de dados.A terceira caixa de seleção indica se inclui procedimentos armazenados e funções no modelo.

  12. Selecione o botão Concluir para gerar um arquivo .edmx que contém um Modelo de Dados de Entidade que é baseado no banco de dados de Escola.

    Um arquivo, Model1.edmx, é adicionado ao seu projeto, e um diagrama de banco de dados aparece.

  13. Na barra de menu, clique em Visualização, Outras Janelas, Navegador do Modelo de Dados de Entidade para exibir todos os detalhes do modelo ou Detalhes de Mapeamento do Modelo de Dados de Entidade para abrir uma janela que mostra como o modelo de objeto gerado mapeia em tabelas de banco de dados e colunas.

Próximas etapas

Explore outras consultas olhando os operadores de consulta disponíveis como listado em Expressões de consulta (F#).

Consulte também

Tarefas

Passo a passo: Acessando um banco de dados SQL por meio de provedores de tipo e entidades (F#)

Referência

Provedor de tipo de EdmxFile (F#)

Outros recursos

Provedores de tipo

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)