Salah satu aspek terpenting dari pengembangan perangkat lunak adalah prototyping cepat. Sebagian besar layanan memerlukan setidaknya beberapa operasi CRUD, dan sebagian besar aplikasi dapat digambarkan sebagai aplikasi berbasis data. API yang saya tulis pada dasarnya mengambil data dari database dan mengembalikannya ke klien sebagai JSON. OdataToEntity adalah alat yang menghasilkan API dari database dan menghilangkan kebutuhan untuk menulis REST API yang terpisah.
Pada artikel ini, saya akan menunjukkan bagaimana OdataToEntity dapat membantu menghilangkan pekerjaan yang membosankan dalam menulis metode CRUD. Pada artikel terakhir , saya berbicara tentang cara membuat layanan OData dengan pengkodean minimal, dalam artikel ini saya akan menunjukkan cara melakukan ini tanpa menulis kode sama sekali.
Fungsionalitas ini tersedia di proyek OdataToEntity.EfCore.DynamicDataContext , yang merupakan bagian dari perpustakaan OdataToEntity. Contoh server HTTP diimplementasikan dalam bentuk program konsol yang menerima string koneksi ke database sebagai input. Database yang didukung: MySql, PostgreSql, Sql Server. Selain tabel dan operasi CRUD, tampilan, prosedur dan fungsi tersimpan juga tersedia.
Deskripsi server HTTP
Kode sumber server tersedia di GitHub .
Konfigurasi server dilakukan melalui file konfigurasi . Ini adalah file inti Asp standar .net di mana kunci OdataToEntity ditambahkan
"OdataToEntity": { "BasePath" : "api", "Provider": "sqlserver", "ConnectionString": "Server=.\\sqlexpress;Initial Catalog=OdataToEntity;Trusted_Connection=Yes;", "UseRelationalNulls": true, "InformationSchemaMappingFileName": "InformationSchemaMapping.json" }
"BasePath" adalah jalur dasar di URL server.
"Penyedia" - tipe database, nilai yang mungkin adalah mysql, postgresql, sqlserver.
"ConnectionString" adalah string koneksi ke database.
"UseRelationalNulls" - menunjukkan apakah akan menggunakan semantik dari basis data relasional
saat membandingkan nilai nol.
"InformationSchemaMappingFileName" - pengaturan tambahan untuk menampilkan database di API.
Program ini secara otomatis mendeteksi prosedur, fungsi, hubungan antara tabel database, memeriksa kunci asing mereka. Saya menggunakan ini untuk menanamkan hubungan dalam skema layanan OData. Untuk lebih lanjut menyesuaikan nama, gunakan file InformationSchemaMapping.json , yang merupakan class InformationSchemaMapping kelas berseri.
Kunci "Operasi" menjelaskan prosedur dan fungsi yang tersimpan, dan "Tabel" menjelaskan tabel dan tampilan. Properti "DbName" - nama dalam database, "EdmName" - nama dalam layanan, "Kecualikan" tidak termasuk database dan objek layanan. Jika prosedur / fungsi yang disimpan mengembalikan tabel, maka nama tabel harus diatur dalam properti "ResultTableDbName". Untuk mengubah nama properti navigasi, Anda perlu menggunakan tombol "Navigasi", di mana properti "TargetTableName" menunjuk ke tabel target dari properti navigasi, dan "NavigationName" - namanya. Jika tabel berisi beberapa kunci asing untuk tabel yang sama, maka untuk membedakan antara properti navigasi ini, alih-alih "TargetTableName", Anda harus menentukan "ConstraintName" - nama kunci asing basis data. Untuk properti banyak ke banyak, Anda perlu menentukan "ManyToManyTarget" - nama tabel target (untuk informasi lebih lanjut tentang implementasi many-to-many, lihat tautan ini).
Contoh kode
Jika Anda perlu menggunakan fungsi ini dalam kode Anda, tambahkan tautan ke proyek OdataToEntity.EfCore.DynamicDataContext
Bagaimana cara kerjanya
Tampilan information_schema membangun konteks Entity Framework. Entitas konteksnya adalah turunan dari kelas abstrak DynamicType . Kelas ini memberlakukan batasan pada jumlah kolom dalam tabel, tidak boleh lebih dari 50. Jumlah properti navigasi tidak boleh melebihi untuk properti dari kunci utama 50, dari kunci asing 30.
Jumlah total tabel dan tampilan dibatasi hingga 110, jumlah ini dibatasi oleh implementasi kelas DynamicType . Anda bisa menambah jumlah properti atau kelas dengan menambahkannya ke kode sumber.
Skema OData dibangun berdasarkan konteks Entity Framework, seperti yang sudah dijelaskan dalam artikel saya sebelumnya. Skema ini diperlukan untuk menerjemahkan permintaan ke pohon ekspresi, yang diteruskan ke konteks EntityFramework.
Struktur Kode Sumber
Dipecahkan - sln \ OdataToEntity.Test.DynamicDataContext.sln
Project - source \ OdataToEntity.EfCore.DynamicDataContext
Server HTTP - test \ OdataToEntity.Test.DynamicDataContext.AspServer
Tes - OdataToEntity.Test.DynamicDataContext
Skrip tes dasar sql - test \ sql_scripts