Maison > base de données > tutoriel mysql > Comment générer des entités de classe C# à partir d'une table de base de données sans ORM ?

Comment générer des entités de classe C# à partir d'une table de base de données sans ORM ?

DDD
Libérer: 2024-12-16 02:27:10
original
666 Les gens l'ont consulté

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

Générer des entités de classe à partir d'une table de base de données

Supposons que vous ayez besoin de créer des entités de classe essentielles à partir d'une table de base de données, en omettant l'utilisation de l'objet-relationnel Cadres de cartographie (ORM). Le but est de générer des classes simples qui ressemblent à la structure d'une table de base de données donnée.

Considérons une table avec le schéma suivant :

+----+-------+----------------+
| ID | Name  |     Phone      |
+----+-------+----------------+
|  1 | Alice | (555) 555-5550 |
|  2 | Bob   | (555) 555-5551 |
|  3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
Copier après la connexion

Pour générer une entité de classe correspondante, nommée Person, vous pouvez exploiter la requête SQL suivante :

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
Copier après la connexion

Cette requête génère dynamiquement l'entité de classe en mappant les noms de colonnes, les types de données et les contraintes de nullité de la table vers les propriétés de la classe. La classe Person résultante ressemblerait à ceci :

public class Person 
{
    public string Name { get; set; }
    public string Phone { get; set; }
}
Copier après la connexion

Vous pouvez personnaliser la génération de code en modifiant la requête SQL, par exemple en définissant l'espace de noms, l'accessibilité de la classe ou en ajoutant des propriétés supplémentaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal