Um dos aspectos mais importantes do desenvolvimento de software é a prototipagem rápida. A maioria dos serviços requer pelo menos algumas operações CRUD, e a maioria dos aplicativos pode ser descrita como aplicativos controlados por dados. As APIs que escrevo basicamente capturam dados do banco de dados e os devolvem ao cliente como JSON. OdataToEntity é uma ferramenta que gera uma API a partir de um banco de dados e elimina a necessidade de gravar uma API REST separada.
Neste artigo, mostrarei como o OdataToEntity pode ajudar a eliminar o trabalho chato de escrever métodos CRUD. No último artigo, falei sobre como criar um serviço OData com codificação mínima. Neste artigo, mostrarei como fazer isso sem escrever código.
Essa funcionalidade está disponível no projeto OdataToEntity.EfCore.DynamicDataContext , que faz parte da biblioteca OdataToEntity. Um exemplo de servidor HTTP é implementado na forma de um programa de console que aceita uma cadeia de conexão ao banco de dados como uma entrada. Bancos de dados suportados: MySql, PostgreSql, Sql Server. Além das tabelas e operações CRUD, estão disponíveis visualizações, procedimentos e funções armazenados.
Descrição do servidor HTTP
O código fonte do servidor está disponível no GitHub .
A configuração do servidor é realizada através do arquivo de configuração . Este é um arquivo principal do Asp .net padrão no qual a chave OdataToEntity é adicionada
"OdataToEntity": { "BasePath" : "api", "Provider": "sqlserver", "ConnectionString": "Server=.\\sqlexpress;Initial Catalog=OdataToEntity;Trusted_Connection=Yes;", "UseRelationalNulls": true, "InformationSchemaMappingFileName": "InformationSchemaMapping.json" }
"BasePath" é o caminho base na URL do servidor.
"Provedor" - tipo de banco de dados, os valores possíveis são mysql, postgresql, sqlserver.
"ConnectionString" é a cadeia de conexão com o banco de dados.
"UseRelationalNulls" - indica se deve ser usada a semântica do banco de dados relacional
ao comparar valores zero.
"InformationSchemaMappingFileName" - configuração adicional para exibir o banco de dados na API.
O programa detecta automaticamente procedimentos, funções, relacionamentos entre tabelas de banco de dados, verificando suas chaves estrangeiras. Eu uso isso para incorporar relacionamentos em um esquema de serviço OData. Para personalizar ainda mais os nomes, use o arquivo InformationSchemaMapping.json , que é a classe serializada InformationSchemaMapping .
A tecla "Operações" descreve procedimentos e funções armazenados, e "Tabelas" descreve tabelas e visualizações. Propriedades "DbName" - o nome no banco de dados, "EdmName" - o nome no serviço, "Excluir" exclui o banco de dados e o objeto de serviço. Se o procedimento / função armazenada retornar uma tabela, o nome da tabela deverá ser definido na propriedade "ResultTableDbName". Para alterar o nome de uma propriedade de navegação, você precisa usar a tecla "Navigations", onde a propriedade "TargetTableName" indica a tabela de destino da propriedade de navegação e "NavigationName" é o nome. Se a tabela contiver várias chaves estrangeiras para a mesma tabela, para distinguir entre essas propriedades de navegação, em vez de "TargetTableName", você deverá especificar "ConstraintName" - o nome da chave estrangeira do banco de dados. Para a propriedade muitos-para-muitos, você precisa especificar "ManyToManyTarget" - o nome da tabela de destino (para obter mais informações sobre a implementação muitos-para-muitos, consulte este link ).
Exemplo de código
Se você precisar usar essa funcionalidade em seu código, adicione um link ao projeto OdataToEntity.EfCore.DynamicDataContext
Como isso funciona
As visualizações information_schema criam o contexto do Entity Framework. As entidades do contexto são descendentes da classe abstrata DynamicType . Essa classe impõe restrições ao número total de colunas na tabela, não deve haver mais de 50. O número de propriedades de navegação não deve exceder para propriedades da chave primária 50, da chave estrangeira 30.
O número total de tabelas e visualizações é limitado a 110, esse número é limitado pelas implementações da classe DynamicType . Você pode aumentar o número de propriedades ou classes adicionando-as ao código-fonte.
O esquema OData é criado com base no contexto do Entity Framework, conforme já descrito no meu artigo anterior. Esse esquema é necessário para converter a solicitação na árvore de expressão, que é passada para o contexto EntityFramework.
Estrutura do código fonte
Resolvido - sln \ OdataToEntity.Test.DynamicDataContext.sln
Projeto - source \ OdataToEntity.EfCore.DynamicDataContext
Servidor HTTP - test \ OdataToEntity.Test.DynamicDataContext.AspServer
Testes - OdataToEntity.Test.DynamicDataContext
Scripts de base de teste do sql - test \ sql_scripts