1

タイトルがひどいので、長いバージョンを以下に示します。

変数データをデータベース列に格納する必要があります。ほとんどの場合、キーと値のペアですが、アイテムの数とそれらのアイテムの名前の両方が実行時に完全に不明です。私の最初の考えは、データ (辞書) をデータベースに格納できる JSON 文字列のようなものに "pickle" することです。アイテムを取得するときに、JSON 文字列を通常の C# 辞書に変換 ("unpickle") します。明らかに、JSON 文字列を直接操作する人を望んでいないので、データベース列に対応する実際のプロパティはプライベートにする必要があり、マップされないパブリック ゲッターとセッターを用意します。

private string Data { get; set; }
public Dictionary<string, object> DataDictionary
{
    get
    {
        return Deserialize(Data);
    }
    set
    {
        Data = Serialize(value);
    } 
}

もちろん問題は、EF がプライベート プロパティのマップを拒否し、実際にはマップされるべきではないDataパブリック プロパティをマップしたいということです。DataDictionaryこれを回避する方法はあると私は信じていますが、これが生成し始める複雑さは、私がすべきではないうさぎの穴に落ちていると思います. ここで私の考えは合理的ですか、それとも別の方向に進むべきですか?

キー列と値列だけで構成される基本的なテーブルを使用して、単純に 1 対多の関係を作成できると思いますが、それは陳腐に感じられます。しかし、おそらく、EF の固有の制限を考えると、実際にはそれがより良い方法でしょうか?

4

1 に答える 1

0

複雑なタイプを使用してみましたか?EFモデルで複雑なタイプの文字列を作成することで、目標を達成できるはずです。

モデルに複合型を追加することから始めます。複合型に、データを保持する文字列型のスカラープロパティを追加します。

次に、データを保持するエンティティにこの複合型のプロパティを作成できます。

コードジェネレーターは、複合型のプロパティへのアクセスを提供する部分クラスを追加する必要があります。複合型の新しい部分クラスを作成し、質問のようにプロパティとしてシリアル化/逆シリアル化コードを追加します。その後、このプロパティを使用してデータにアクセスできます。

この例の複合型は、基本的に、データ値をストレージに格納できるようにする値のラッパーとして機能します。

于 2013-01-09T16:07:07.653 に答える