列挙型を文字列としてデータベースに保存する方法

ZCoder

これは私のモデルクラスで、ゾンビまたは人間のタイプがあります。

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Type Type { get; set; }
    public List<Wepon> WeposInList { get; set; }
    }  

public enum Type
{   [Description("Zombie")] Zombie,
    [Description("Human")] Human
}

現在、Intにデータを保存しています

ここに画像の説明を入力してください

intではなくHumanとZombieとしてデータを保存したい

Pawel Gorczynski

私が覚えている限り、この問題が発生しました。正直なところ、MSがこの機能を追加しなかった理由はわかりません(NHはいつものようにそれを行うことができます)。

とにかく、私が通常行ったことは、次のようなconst文字列クラスを使用することです。

public static class MyEnum
{
    public const string Foo = "Foo";
    public const string Bar = "Bar";
}

public class Client
{

    public string MyVal { get; set; }

    public Client()
    {
        MyVal = MyEnum.Bar;
    }

}

短所-できるだけ単純です。

欠点-型チェックが緩んでいます(プログラムで強制することもできますが)。


そこで今回はもっと野心的なことを考えてみました。そこで、ブライアンが説明した概念を採用しました(たとえば、特定の列挙型がドメイン全体で広く使用されている場合、いくつかの欠点があります)。そしてまあ..私は次の作業をしました:

値を格納するための基本コンポーネントクラス:

[ComplexType]
public class DbEnum<TEnum>
{
    public string _ { get; set; }

    public DbEnum()
    {
        _ = default(TEnum).ToString();
    }

    protected DbEnum(TEnum value)
    {
        _ = value.ToString();
    }

    public TEnum ToEnum()
    {
        return _.ToEnum<TEnum>();
    }

    public static implicit operator DbEnum<TEnum>(TEnum value)
    {
        return new DbEnum<TEnum>(value);
    }

    public static implicit operator TEnum(DbEnum<TEnum> value)
    {
        return value.ToEnum();
    }
}

...基本的にはこれで十分です..EFがジェネリック型をサポートしていないことを除いて...

これは、すべての列挙型に対して、次のようなものが必要であることを意味します...

public enum PrivacyLevel
{
    Public,
    Friends,
    Private
}

public class PrivacyLevelEnum : DbEnum<PrivacyLevel>
{
    public PrivacyLevelEnum() : this(default (PrivacyLevel))
    {      
    }

    public PrivacyLevelEnum(PrivacyLevel value) : base(value)
    {
    }

    public static implicit operator PrivacyLevelEnum(PrivacyLevel value)
    {
        return new PrivacyLevelEnum(value);
    }

    public static implicit operator PrivacyLevel(PrivacyLevelEnum value)
    {
        return value.ToEnum();
    }
}

これにより、たとえばT4テンプレートを使用して簡単に生成できるボイラープレートが得られます。

最終的には次のものを使用することになります。

public class CalendarEntry : Entity
{

    public virtual PrivacyLevelEnum PrivacyLevel { get; set; } = new PrivacyLevelEnum();

}

ただし、暗黙的な変換が行われているため、ヘルパー型を認識できるのはクラス宣言だけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

列挙型をデータベースに保存する方法

分類Dev

列挙型データ型に特殊文字を保存する

分類Dev

データベースから列ごとに文字列を取得した後、文字列を列挙型にキャストする

分類Dev

DateTimeを文字列としてデータベースに保存する

分類Dev

データベースルームに列挙型フィールドを保存する方法

分類Dev

Oracle RAWデータ型(文字列として保存)をJava文字列に変換する方法は?

分類Dev

Spring Data:列挙型リストをmySQLデータベースに保存する方法

分類Dev

RawJSONを文字列としてデータベースに保存します

分類Dev

列挙値をデータベースに保存する

分類Dev

データベース内のビューとしてC#列挙型を公開する

分類Dev

OrmクエリでLaravelを使用してデータベースに絵文字文字列を保存する方法

分類Dev

外部キー参照を使用して文字列プロパティをデータベースに保存する方法

分類Dev

浮動小数点の結果を文字列に変換してFirebaseデータベースに保存する方法

分類Dev

SQLPowerShellを使用してデータベースを列挙する

分類Dev

配列を分解してデータベースに保存する方法

分類Dev

自分の列挙型を属性としてCoreDataに保存する方法

分類Dev

EntityFrameworkのデータベース列値に基づいて列挙型テキストを表示する

分類Dev

複数の列挙型データを単一のpojoに書き込み、リストとして返す方法

分類Dev

typescriptでインデックスキータイプとして列挙型を使用する方法

分類Dev

迅速な列挙型をコアデータに保存する方法は?

分類Dev

jdbcを使用して列挙値をデータベースに保存して読み取る?

分類Dev

データベースからデータを取得して文字列に保存する

分類Dev

文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

分類Dev

文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

分類Dev

文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

分類Dev

Firebaseデータベースからデータを取得して文字列として保存するにはどうすればよいですか?

分類Dev

データベースに保存されているJSON文字列からフィールドを取得する方法

分類Dev

文字列をデータベースに保存する

分類Dev

WordPressのデータベースに文字列を保存する

Related 関連記事

  1. 1

    列挙型をデータベースに保存する方法

  2. 2

    列挙型データ型に特殊文字を保存する

  3. 3

    データベースから列ごとに文字列を取得した後、文字列を列挙型にキャストする

  4. 4

    DateTimeを文字列としてデータベースに保存する

  5. 5

    データベースルームに列挙型フィールドを保存する方法

  6. 6

    Oracle RAWデータ型(文字列として保存)をJava文字列に変換する方法は?

  7. 7

    Spring Data:列挙型リストをmySQLデータベースに保存する方法

  8. 8

    RawJSONを文字列としてデータベースに保存します

  9. 9

    列挙値をデータベースに保存する

  10. 10

    データベース内のビューとしてC#列挙型を公開する

  11. 11

    OrmクエリでLaravelを使用してデータベースに絵文字文字列を保存する方法

  12. 12

    外部キー参照を使用して文字列プロパティをデータベースに保存する方法

  13. 13

    浮動小数点の結果を文字列に変換してFirebaseデータベースに保存する方法

  14. 14

    SQLPowerShellを使用してデータベースを列挙する

  15. 15

    配列を分解してデータベースに保存する方法

  16. 16

    自分の列挙型を属性としてCoreDataに保存する方法

  17. 17

    EntityFrameworkのデータベース列値に基づいて列挙型テキストを表示する

  18. 18

    複数の列挙型データを単一のpojoに書き込み、リストとして返す方法

  19. 19

    typescriptでインデックスキータイプとして列挙型を使用する方法

  20. 20

    迅速な列挙型をコアデータに保存する方法は?

  21. 21

    jdbcを使用して列挙値をデータベースに保存して読み取る?

  22. 22

    データベースからデータを取得して文字列に保存する

  23. 23

    文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

  24. 24

    文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

  25. 25

    文字列型パラメーターを使用して列挙型にアクセスするときのTypeScript TS7015エラー

  26. 26

    Firebaseデータベースからデータを取得して文字列として保存するにはどうすればよいですか?

  27. 27

    データベースに保存されているJSON文字列からフィールドを取得する方法

  28. 28

    文字列をデータベースに保存する

  29. 29

    WordPressのデータベースに文字列を保存する

ホットタグ

アーカイブ