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 | +----+-------+----------------+
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
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; } }
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!