2012-02-20 3 views
1

EF(4.1)モデルクラスのプロパティで使用するカスタムC#(4.0)クラスを作成しました。このカスタムクラスの唯一のプロパティは、その型としてGuidです。今、私はカスタムテーブルを、SQL Server 2008 R2でサポートされているプリミティブ型のように、モデルテーブルのGuid列にシリアル化できるかどうかを知りたいと考えています。EFの「プリミティブ」列として単一のプリミティブプロパティを持つクラスをシリアライズ

具体的には、モデルプロパティとして、概念的にはGuidの意味と機能が離れているため、単純なGuidをプロパティとして使用することは望ましくありません。私はGuidを主キーとして使用しません。むしろ、私はそれを外部キーとして使用して、非主要なGuid列/プロパティ(および同じGuidを持つ複数の行/インスタンス)を持つ別のテーブル/コレクションにアクセスします。これは遠くに聞こえるかもしれませんが、この特定の目的のために非常に便利なデザインになります。私の頭の上オフ

答えて

1

、私は次のようなアプローチは、EFで動作するかもしれないと思う:

  1. は先に行くと、あなたのモデルとデータベースにGUID列を追加しますが、あなたのEFマッピングで、その取得を行い、アクセサをプライベートまたは適切に保護されたものに設定します。
  2. カスタムクラスに2つの暗黙的な変換を追加します.1つはGUIDからクラスのインスタンスに変換し、もう1つはクラスのインスタンスからGUIDに変換します(詳細は以下を参照してください)。
  3. カスタムタイプのパブリックプロパティを公開するモデルクラスの部分クラスを作成し、ゲッターとセッターでプライベート/保護されたGUIDプロパティに渡します(これは、暗黙的な変換を実装しました)。

EFが認識している限り、あなたはそのGuidプロパティを持っていますが、コーディング時にモデルが知っている限り、カスタムタイププロパティを持つだけです。時間にコメントすることができないため

public class MyClass 
{ 
    public Guid Key { get; set; } 

    public static implicit operator Guid(MyClass c) 
    { 
     return c.Key; 
    } 

    public static implicit operator MyClass(Guid g) 
    { 
     return new MyClass { Key = g; } 
    } 
} 
+0

謝罪:暗黙の型変換を作成するには

。はい、これは本質的にどのように機能するかです。 – Serendip

関連する問題