Bagaimana saya bisa menghasilkan kelas dari objek tabel SQL Server?
Saya tidak berbicara tentang menggunakan beberapa ORM. Saya hanya perlu membuat entitas (kelas sederhana). Sesuatu seperti:
public class Person
{
public string Name { get;set; }
public string Phone { get;set; }
}
Diberikan beberapa tabel seperti:
+----+-------+----------------+
| ID | Name | Phone |
+----+-------+----------------+
| 1 | Alice | (555) 555-5550 |
| 2 | Bob | (555) 555-5551 |
| 3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
c#
sql
sql-server
tsql
Gui
sumber
sumber
Jawaban:
Setel @TableName ke nama tabel Anda.
sumber
end
danColumnType
dalam skrip SQL Alex.+ CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END
float' then 'float'
" menjadi "when 'float' then 'double'
dan Anda harus mengubah"when 'real' then 'double'
"menjadi"when 'real' then 'float'
. "Tampaknya Anda membuat tipe-tipe itu bingung. C # yang setara dengan float SQL adalah ganda dan C # yang setara dengan SQL real adalah float .print @Result
agarprint CAST(@Result AS TEXT)
tidak terpotong di meja besar.Saya tidak bisa mendapatkan jawaban Alex untuk bekerja di Sql Server 2008 R2. Jadi, saya menulis ulang menggunakan prinsip dasar yang sama. Sekarang memungkinkan untuk skema dan beberapa perbaikan telah dilakukan untuk pemetaan properti kolom (termasuk memetakan tipe tanggal nullable ke tipe nilai C # nullable). Inilah Sql:
Ini menghasilkan C # seperti berikut:
Ini mungkin ide untuk menggunakan EF, Linq ke Sql, atau bahkan Perancah; Namun, ada kalanya sepotong kode seperti ini berguna. Terus terang, saya tidak suka menggunakan properti navigasi EF di mana kode yang dihasilkannya membuat 19.200 panggilan basis data terpisah untuk mengisi kisi 1000 baris. Ini bisa dicapai dalam satu panggilan basis data. Meskipun demikian, mungkin saja arsitek teknis Anda tidak ingin Anda menggunakan EF dan sejenisnya. Jadi, Anda harus kembali ke kode seperti ini ... Kebetulan, mungkin juga merupakan ide untuk menghias masing-masing properti dengan atribut untuk DataAnnotations, dll., Tapi saya tetap menggunakan POCO ini.
EDIT Tetap untuk TimeStamp dan Panduan ?
sumber
Versi VB
sumber
float
harus pergi keDouble
,byte[]
keByte()
Sedikit terlambat tetapi saya telah membuat alat web untuk membantu membuat objek C # (atau lainnya) dari hasil SQL, SQL Table dan SQL SP.
sql2object.com
Ini benar-benar dapat melindungi Anda dari mengetik semua properti dan tipe Anda.
Jika jenisnya tidak dikenali, standarnya akan dipilih.
sumber
CREATE TABLE
hal sehingga saya dapat memotong dan menempel semuanya. Juga jika Anda mendapatkan peluang, dapatkah Anda menambahkan 'Potong ()' di sana - gagal jika ada garis kosong di awal dan kemudian orang akan menyerah. Sederhana jika Anda tahu untuk menghapusnya - tetapi Anda akan kehilangan orang ketika Anda memberikan kesalahan.Saya mencoba memberikan 2 sen saya
0) QueryFirst https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst Query-first adalah ekstensi studio visual untuk bekerja secara cerdas dengan SQL dalam proyek C #. Gunakan templat .sql yang disediakan untuk mengembangkan kueri Anda. Saat Anda menyimpan file, Query-first menjalankan kueri Anda, mengambil skema dan menghasilkan dua kelas dan antarmuka: kelas wrapper dengan metode Execute (), ExecuteScalar (), ExecuteNonQuery () dll, antarmuka yang sesuai, dan enkapsulasi POCO sederet hasil.
1) Sql2Objects Membuat kelas mulai dari hasil kueri (tapi bukan DAL)
2) https://docs.microsoft.com/en-us/ef/ef6/resources/tools
3) https://visualstudiomagazine.com/articles/2012/12/11/sqlqueryresult-code-generation.aspx
4) http://www.codesmithtools.com/product/generator#features
sumber
Ya ini bagus jika Anda menggunakan ORM sederhana seperti Dapper.
Jika Anda menggunakan .Net, Anda dapat membuat file XSD saat dijalankan dengan DataSet apa pun menggunakan metode WriteXmlSchema. http://msdn.microsoft.com/en-us/library/xt7k72x8(v=vs.110).aspx
Seperti ini:
Dari sana Anda dapat menggunakan xsd.exe untuk membuat kelas XML yang dapat diserialisasi dari Prompt Perintah Pengembang. http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx
seperti ini:
sumber
Untuk mencetak properti NULLABLE, gunakan ini.
Ini menambahkan sedikit modifikasi pada skrip Alex Aza untuk
CASE
blok pernyataan.sumber
Saya mencoba menggunakan saran di atas dan dalam proses meningkatkan solusi di utas ini.
Katakanlah Anda menggunakan kelas dasar (ObservableObject dalam kasus ini) yang mengimplementasikan PropertyChanged Event, Anda akan melakukan sesuatu seperti ini. Saya mungkin akan menulis posting blog suatu hari di blog saya sqljana.wordpress.com
Harap lakukan penggantian nilai untuk tiga variabel pertama:
Kelas dasar didasarkan pada artikel Josh Smith di sini Dari http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/
Saya mengubah nama kelas menjadi ObservableObject dan juga memanfaatkan fitur ac # 5 menggunakan atribut CallerMemberName
Inilah bagian yang kalian akan sukai lagi. Saya membangun skrip Powershell untuk menghasilkan semua tabel dalam database SQL. Ini didasarkan pada seorang guru Powershell bernama cmdlet Chad Miller Invoke-SQLCmd2 yang dapat diunduh dari sini: http://gallery.technet.microsoft.com/ScriptCenter/7985b7ef-ed89-4dfd-b02a-433cc4e30894/
Setelah Anda memiliki cmdlet itu, skrip Powershell untuk menghasilkan semua tabel menjadi sederhana (lakukan penggantian variabel dengan nilai spesifik Anda).
sumber
Jika Anda memiliki akses ke SQL Server 2016, Anda dapat menggunakan opsi FOR JSON (dengan INCLUDE_NULL_VALUES) untuk mendapatkan output JSON dari pernyataan pilih. Salin output, kemudian di Visual Studio, rekatkan khusus -> rekatkan JSON sebagai kelas.
Jenis solusi anggaran, tetapi mungkin menghemat waktu.
sumber
buat PROSEDUR untuk membuat kode khusus menggunakan templat
sekarang buat kode khusus
misalnya kelas c #
output adalah
untuk LINQ
output adalah
untuk kelas java
output adalah
untuk model android sugarOrm
output adalah
sumber
Untuk mencetak properti NULLABLE DENGAN KOMENTAR (Ringkasan), gunakan ini.
Ini sedikit modifikasi dari jawaban pertama
sumber
Majalah Visual Studio menerbitkan ini:
Menghasilkan .NET POCO Classes untuk Hasil Query SQL
Ini memiliki proyek yang dapat diunduh yang dapat Anda bangun, berikan info SQL Anda, dan itu akan membuat kelas untuk Anda.
Sekarang jika alat itu baru saja menciptakan Perintah SQL untuk SELECT, INSERT, dan UPDATE ....
sumber
Komersial, tetapi CodeSmith Generator melakukan itu: http://www.codesmithtools.com/product/generator
sumber
Saya bingung apa yang Anda inginkan dari ini, tetapi di sini adalah opsi umum ketika merancang apa yang ingin Anda desain.
sumber
Sebagai penghargaan atas solusi Alex dan Guilherme untuk meminta saya membuat ini untuk MySQL untuk menghasilkan kelas C #
sumber
Grab QueryFirst , ekstensi studio visual yang menghasilkan kelas wrapper dari kueri SQL. Anda tidak hanya ...
Dan sebagai bonus, itu akan melempar ...
Yakin ingin mendasarkan kelas Anda langsung di meja Anda? Tabel adalah gagasan penyimpanan data statis yang dinormalisasi yang termasuk dalam DB. Kelas dinamis, cair, sekali pakai, khusus konteks, mungkin didenormalisasi. Mengapa tidak menulis kueri nyata untuk data yang Anda inginkan untuk operasi, dan biarkan QueryFirst menghasilkan kelas dari itu.
sumber
Posting ini telah menyelamatkan saya beberapa kali. Saya hanya ingin menambahkan dua sen saya. Bagi mereka yang tidak suka menggunakan ORM, dan bukannya menulis kelas DAL mereka sendiri, ketika Anda memiliki 20 kolom dalam tabel, dan 40 tabel berbeda dengan operasi CRUD masing-masing, menyakitkan dan membuang-buang waktu. Saya mengulangi kode di atas, untuk menghasilkan metode CRUD berdasarkan entitas tabel dan properti.
Tentu saja itu bukan kode antipeluru, dan dapat ditingkatkan. Hanya ingin berkontribusi pada solusi yang sangat baik ini
sumber
sedikit diubah dari balasan teratas:
yang membuat output dibutuhkan untuk LINQ penuh dalam deklarasi C #
sumber
Cara paling sederhana adalah EF, Reverse Engineer. http://msdn.microsoft.com/en-US/data/jj593170
sumber
Saya suka mengatur kelas saya dengan anggota lokal pribadi dan pengakses publik / mutator. Jadi saya telah memodifikasi skrip Alex di atas untuk melakukannya juga bagi siapa saja yang tertarik.
sumber
Tambahan kecil untuk solusi sebelumnya:
object_id(@TableName)
hanya berfungsi jika Anda berada dalam skema default.berfungsi dalam skema apa pun yang disediakan @tableName unik.
sumber
Jika berguna bagi orang lain, bekerja pada pendekatan Code-First menggunakan pemetaan atribut, saya ingin sesuatu yang baru saja meninggalkan saya perlu mengikat entitas dalam model objek. Jadi berkat jawaban Carnotaurus, saya memperpanjangnya sesuai saran mereka sendiri dan membuat beberapa tweak.
Oleh karena itu, ini bergantung pada solusi yang terdiri dari DUA bagian, yang keduanya merupakan fungsi SQL Scalar-Valued:
Penggunaan dari dalam MS SQL Management Studio:
akan menghasilkan nilai kolom yang dapat Anda salin dan tempel ke Visual Studio.
Jika itu membantu siapa pun, baguslah!
sumber
Saya mengemas ide-ide dari beberapa jawaban berbasis SQL di sini, terutama jawaban root oleh Alex Aza, ke dalam klassify , aplikasi konsol yang menghasilkan semua kelas untuk database yang ditentukan sekaligus:
Misalnya, diberikan tabel
Users
yang terlihat seperti ini:klassify
akan menghasilkan file bernamaUsers.cs
yang terlihat seperti ini:Ini akan menampilkan satu file untuk setiap tabel. Buang apa yang tidak Anda gunakan.
Pemakaian
sumber
Hanya berpikir saya akan menambahkan variasi jawaban atas saya sendiri untuk siapa saja yang tertarik. Fitur utamanya adalah:
Ini akan menambahkan atribut System.Data.Linq.Mapping ke kelas dan setiap properti. Berguna untuk siapa saja yang menggunakan Linq to SQL.
sumber
Anda baru saja melakukannya, selama tabel Anda berisi dua kolom dan disebut sesuatu seperti 'tblPeople'.
Anda selalu dapat menulis pembungkus SQL Anda sendiri. Saya sebenarnya lebih suka melakukannya dengan cara itu, saya BENCI kode yang dihasilkan, dengan cara apa pun.
Mungkin membuat
DAL
kelas, dan memiliki metode yang disebutGetPerson(int id)
, yang menanyakan database untuk orang itu, dan kemudian membuatPerson
objek Anda dari set hasil.sumber