ホームページ > データベース > mysql チュートリアル > ORM を使用せずにデータベース テーブルから C# クラス エンティティを生成する方法

ORM を使用せずにデータベース テーブルから C# クラス エンティティを生成する方法

DDD
リリース: 2024-12-16 02:27:10
オリジナル
666 人が閲覧しました

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

データベース テーブルからクラス エンティティを生成する

オブジェクト リレーショナルの使用を省略して、データベース テーブルから必須のクラス エンティティを作成する必要があるとします。マッピング (ORM) フレームワーク。目標は、特定のデータベース テーブルの構造に似た単純なクラスを生成することです。

次のスキーマを持つテーブルを考えます:

+----+-------+----------------+
| ID | Name  |     Phone      |
+----+-------+----------------+
|  1 | Alice | (555) 555-5550 |
|  2 | Bob   | (555) 555-5551 |
|  3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
ログイン後にコピー

対応するクラス エンティティ (Person という名前) を生成するには、次の SQL クエリを利用できます:

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
ログイン後にコピー

このクエリは、列名、データ型、テーブルからクラス プロパティへの null 可能性の制約。結果の Person クラスは次のようになります。

public class Person 
{
    public string Name { get; set; }
    public string Phone { get; set; }
}
ログイン後にコピー

名前空間、クラスのアクセシビリティの定義、プロパティの追加など、SQL クエリを変更することでコード生成をカスタマイズできます。

以上がORM を使用せずにデータベース テーブルから C# クラス エンティティを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート