Generieren Sie Klassenentitäten aus einer Datenbanktabelle
Angenommen, Sie müssen wesentliche Klassenentitäten aus einer Datenbanktabelle erstellen und dabei auf die Verwendung von objektbezogenen Elementen verzichten Mapping (ORM)-Frameworks. Das Ziel besteht darin, einfache Klassen zu generieren, die der Struktur einer bestimmten Datenbanktabelle ähneln.
Betrachten Sie eine Tabelle mit dem folgenden Schema:
+----+-------+----------------+ | ID | Name | Phone | +----+-------+----------------+ | 1 | Alice | (555) 555-5550 | | 2 | Bob | (555) 555-5551 | | 3 | Cathy | (555) 555-5552 | +----+-------+----------------+
Um eine entsprechende Klassenentität mit dem Namen Person zu generieren, Sie können die folgende SQL-Abfrage nutzen:
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
Diese Abfrage generiert die Klassenentität dynamisch, indem sie die Spaltennamen, Datentypen und NULL-Zulässigkeitsbeschränkungen aus der Tabelle der zuordnet Klasseneigenschaften. Die resultierende Person-Klasse würde etwa so aussehen:
public class Person { public string Name { get; set; } public string Phone { get; set; } }
Sie können die Codegenerierung anpassen, indem Sie die SQL-Abfrage ändern, z. B. den Namespace definieren, die Klassenzugänglichkeit festlegen oder zusätzliche Eigenschaften hinzufügen.
Das obige ist der detaillierte Inhalt vonWie generiert man C#-Klassenentitäten aus einer Datenbanktabelle ohne ORM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!