Heim >Datenbank >MySQL-Tutorial >Wie generiert man C#-Klassenentitäten aus einer Datenbanktabelle ohne ORM?

Wie generiert man C#-Klassenentitäten aus einer Datenbanktabelle ohne ORM?

DDD
DDDOriginal
2024-12-16 02:27:10671Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn