Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjana Entiti Kelas C# daripada Jadual Pangkalan Data Tanpa ORM?

Bagaimana untuk Menjana Entiti Kelas C# daripada Jadual Pangkalan Data Tanpa ORM?

DDD
Lepaskan: 2024-12-16 02:27:10
asal
666 orang telah melayarinya

How to Generate C# Class Entities from a Database Table Without an ORM?

Jana Entiti Kelas daripada Jadual Pangkalan Data

Andaikan anda perlu mencipta entiti kelas penting daripada jadual pangkalan data, mengetepikan penggunaan Object-Relational Rangka kerja pemetaan (ORM). Matlamatnya adalah untuk menjana kelas mudah yang menyerupai struktur jadual pangkalan data yang diberikan.

Pertimbangkan jadual dengan skema berikut:

+----+-------+----------------+
| ID | Name  |     Phone      |
+----+-------+----------------+
|  1 | Alice | (555) 555-5550 |
|  2 | Bob   | (555) 555-5551 |
|  3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
Salin selepas log masuk

Untuk menjana entiti kelas yang sepadan, bernama Person, anda boleh memanfaatkan pertanyaan SQL berikut:

declare @TableName sysname = 'TableName'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'

select @Result = @Result + '
    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
    select 
        replace(col.name, ' ', '_') ColumnName,
        column_id ColumnId,
        case typ.name 
            when 'bigint' then 'long'
            when 'binary' then 'byte[]'
            when 'bit' then 'bool'
            when 'char' then 'string'
            when 'date' then 'DateTime'
            when 'datetime' then 'DateTime'
            when 'datetime2' then 'DateTime'
            when 'datetimeoffset' then 'DateTimeOffset'
            when 'decimal' then 'decimal'
            when 'float' then 'double'
            when 'image' then 'byte[]'
            when 'int' then 'int'
            when 'money' then 'decimal'
            when 'nchar' then 'string'
            when 'ntext' then 'string'
            when 'numeric' then 'decimal'
            when 'nvarchar' then 'string'
            when 'real' then 'float'
            when 'smalldatetime' then 'DateTime'
            when 'smallint' then 'short'
            when 'smallmoney' then 'decimal'
            when 'text' then 'string'
            when 'time' then 'TimeSpan'
            when 'timestamp' then 'long'
            when 'tinyint' then 'byte'
            when 'uniqueidentifier' then 'Guid'
            when 'varbinary' then 'byte[]'
            when 'varchar' then 'string'
            else 'UNKNOWN_' + typ.name
        end ColumnType,
        case 
            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
            then '?' 
            else '' 
        end NullableSign
    from sys.columns col
        join sys.types typ on
            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@TableName)
) t
order by ColumnId

set @Result = @Result  + '
}'

print @Result
Salin selepas log masuk

Pertanyaan ini menjana entiti kelas secara dinamik dengan memetakan nama lajur, jenis data, dan kekangan kebolehbatalan daripada jadual kepada sifat kelas. Kelas Orang yang terhasil akan kelihatan seperti ini:

public class Person 
{
    public string Name { get; set; }
    public string Phone { get; set; }
}
Salin selepas log masuk

Anda boleh menyesuaikan penjanaan kod dengan mengubah suai pertanyaan SQL, seperti mentakrifkan ruang nama, kebolehcapaian kelas atau menambah sifat tambahan.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Entiti Kelas C# daripada Jadual Pangkalan Data Tanpa ORM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan