0

コードで使用したい DB テーブルにメタデータがあります。メタデータは、費やされた時間を報告するためのさまざまな種類の時間型です。

データは次のとおりです。 通常時間 残業 休暇 病気など

データには、ID と説明、その他の要素があります。

ID = 1
Name = "Regular time"
Description = "Normal work time"

コードでこのデータを関連付けるには、どのような方法がよいでしょうか?

たとえば、報告されたすべての NormalTime を合計するメソッドを作成したい場合 (NormalTime ID と量などの使用時間を格納する別のテーブルがあります)、どうすればよいですか?

ID をハードコーディングしたくありません。

Select * from xyz where TimeType = 1

私がしたいことは:

Select * from xyz where TimeType = NormalTime.

そうしないと、コードが非常に読みにくくなります。

私の現在のソリューションでは、ID に関連するハードコーディングされた文字列 const があります。これに関する問題は、誰かが TimeType の説明を NormalTime から何かに変更した場合、ハードコードされた文字列 const が 1 つのことを言い、db データが別のことを言う場合です。はい、DB コンテンツを制御できないため、これが発生しました :(

では、DB テーブルで変更が発生する可能性があり、コードが読みにくくならない、保守可能で読みやすい方法でこれを解決するにはどうすればよいでしょうか。誰かが TimeTypes を DB に追加でき、後でコードでそれらを使用するメソッドを追加できます。

4

2 に答える 2

2

これを行う 1 つの方法は、Visual Studio の T4 テキスト生成テンプレートを使用することです。(Entity Framework はこれらをコード生成に使用します)

データベースからメタデータを含むテーブルをプルするコードを含むテンプレート ファイルを作成し、静的定数を含むクラスを生成できます。

ただし、データベースが変更されるたびに実行する必要があります。しかし、コードがビルドされるたびに再生成されるように設定できると思います。

T4 テンプレートに関する質問

于 2012-05-29T14:48:31.587 に答える
1

データベース内のテーブルにマップする C# 側の列挙型を使用できます。

http://www.codeproject.com/Articles/41746/Mapping-NET-Enumerations-to-the-Database

于 2012-05-29T15:16:56.490 に答える