Compartilhar via


Instruções passo a passo: gerando tipos F# com base em um arquivo de esquema EDMX (F#)

Este guia passo a passo para o F# 3.0 mostra como criar tipos para dados que são representados pelo EDM (Modelo de Dados de Entidade), o esquema para o qual é especificado em um arquivo .edmx. Esse guia também mostra como usar o provedor de tipos EdmxFile. Antes de começar, considere se um provedor de tipos SqlEntityConnection é uma opção mais apropriada de provedor de tipos. O provedor de tipos SqlEntityConnection funciona melhor em cenários onde você tem um banco de dados dinâmico ao qual você pode se conectar durante a fase de desenvolvimento de 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 tipos também é limitado na medida que expõe tanta funcionalidade de banco de dados quanto o provedor de tipos EdmxFile. Além de isso, se você não tiver uma conexão de banco de dados dinâmico para um projeto de banco de dados que use o Modelo de Dados de Entidade, será possível usar o arquivo .edmx para codificação em relação ao banco de dados. Quando você usa o provedor de tipos EdmxFile, o compilador F# executa EdmGen.exe para gerar os tipos que ele fornece.

Este guia passo a passo ilustra as seguintes tarefas que você deve executar nesta ordem para que as instruções sejam bem-sucedidas:

  • Criando um arquivo EDMX

  • Criando o projeto

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

  • Configurando o provedor de tipos

  • Consultando os dados

  • Chamando um procedimento armazenado

Criando um arquivo EDMX

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

Para criar um arquivo EDMX

  • Se você ainda não tiver um arquivo EDMX, siga as instruções no final deste guia passo a passo na etapa Para configurar o Modelo de Dados de Entidade.

Criando o projeto

Nesta etapa, você criará um projeto e adicionará referências apropriadas a ele para usar o provedor de tipos EDMX.

Para criar e configurar um projeto de F#

  1. Feche o projeto anterior, crie outro projeto e o chame SchoolEDM.

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

  3. Na área Assemblies, escolha o nó Framework.

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

  5. Na área 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 código a seguir 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 SQL Server simples lembra o código a seguir.

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 Cadeias de conexão.

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

  • A geração manual de cadeias de conexão EDMX pode ser difícil, portanto, é possível economizar tempo gerando-as via programação. Se você souber a sua cadeia de conexão EDMX, ignore esta etapa e simplesmente use essa cadeia na próxima etapa. Em caso negativo, use o código a seguir para gerar a cadeia de conexão EDMX de uma cadeia de conexão de banco de dados fornecida por você.

    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 tipos

Nesta etapa, você criará e configurará o provedor de tipos com a cadeia de conexão EDMX e você gerará tipos para o esquema definido no arquivo .edmx.

Para configurar o provedor de tipos e gerar tipos

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

  2. Abra o menu de atalho para o nó do projeto em seu projeto F#, escolha Adicionar Item Existente e selecione o arquivo .edmx para ser adicionado ao seu projeto.

  3. Insira o código a seguir para ativar o provedor de tipos para o seu arquivo .edmx. Substitua Server\Instance pelo nome de seu servidor que está executando o SQL Server e o nome de sua instância e use o nome de seu arquivo .edmx da primeira etapa neste 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

Nesta etapa, 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 ao usar o provedor de tipos EDMX. No procedimento a seguir, o banco de dados escolar contém um procedimento armazenado, UpdatePerson, que atualiza um registro, novos valores fornecidos para as colunas. Você pode usar esse procedimento armazenado porque ele está exposto como um método no tipo DataContext.

Para chamar um procedimento armazenado

  • Adicione o código a seguir 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 será 1 se houver êxito. Observe que exactlyOne é usado na expressão de consulta para garantir que apenas um resultado seja retornado; caso contrário, uma exceção será acionada. Além de isso, para trabalhar mais facilmente com valores anuláveis, você poderá usar a função simples nullable definida neste 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ê desejar saber como gerar um Modelo de Dados de Entidade completo de um banco de dados e não tiver um banco de dados com o qual testar.

Para configurar o Modelo de Dados de Entidade

  1. Na barra de menus, escolha SQL, Editor Transact-SQL, Nova Consulta para criar um banco de dados. Caso sejam solicitados, especifique o servidor e a instância de banco de dados.

  2. Copie e cole o conteúdo do script da base de dados que cria a base de dados do aluno, conforme descrito na documentação do Entity Framework no Centro de Desenvolvedores de Dados.

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

  4. No Gerenciador de Servidores, abra o menu de atalho para Conexões de Dados, escolha Adicionar Conexão e insira o nome do servidor de banco de dados, o nome da instância e o banco de dados escolar.

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

    O Assistente do Modelo de Dados de Entidade será aberto. Ao usar este assistente, você poderá escolher como deseja criar o Modelo de Dados de Entidade.

  6. Sob Escolher Conteúdo do Modelo, selecione a caixa de seleção Gerar do banco de dados.

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

    Esta conexão deve lembrar <servername>.<instancename>.School.dbo.

  8. Copie sua cadeia de conexão de entidade para a Área de Transferência porque essa cadeia de caracteres pode ser importante posteriormente.

  9. Certifique-se de que a caixa de seleção para salvar a cadeia de conexão de entidade no arquivo App.Config esteja selecionada e anote o valor da cadeia na caixa de texto o que deverá ajudá-lo a localizar a cadeia de conexão posteriormente, se necessário.

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

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

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

    A primeira caixa de seleção Pluralizar ou singularizar nomes de objetos gerados indica se formas singulares devem ser alteradas para plurais para correspondência a convenções de nomeação de objetos que representam tabelas de 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 procedimentos armazenados e funções devem ser incluídos no modelo.

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

    Um arquivo, Model1.edmx, será adicionado ao seu projeto e um diagrama de banco de dados será exibido.

  13. Na barra de menus, escolha Exibir, 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 é mapeado em tabelas e colunas de banco de dados.

Próximas etapas

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

Consulte também

Tarefas

Instruções passo a passo: acessando um banco de dados SQL por meio de provedores de tipos e entidades (F#)

Referência

Provedor de tipo EdmxFile (F#)

Gerador de EDM (EdmGen.exe)

Outros recursos

Provedores de tipos

Entity Framework

.edmx File Overview (Entity Framework)