web-dev-qa-db-ja.com

Entity Frameworkのvarbinary(MAX)へのオブジェクトタイププロパティのマッピング

object型のプロパティを持つ型がある状況があります。

public class MyType
{
   public virtual object MyProp{get; get;}
}

このタイプは次のようにする必要があります。

  1. Entity Frameworkを使用してbyte[]としてデータベースに保存しました(シリアル化ロジックを理解しました)
  2. WCFを介して送信されます(KnownType属性を使用します)

objectプロパティをマップして、ストレージ用のバイト配列に変換されるようにするにはどうすればよいですか?

注:objectプロパティは値型(非複雑)になります

データベースに保存するための別のタイプを作成することを考えました。例:

public class MyTypeEntity
{
   public virtual byte[] MyProp{get; get;}
}

リレーションシップマッピングを定義しながら、タイプ間で変換/変換するにはどうすればよいですか?

これには、保存時に何らかの傍受が含まれますか?

背を向けることなく考えられる最善の解決策は、シリアル化されたデータをDBに保存することです。

C#に何らかの形式のproperty covarianceがあった場合、これはおそらく簡単に機能したでしょう。私の知る限り、それは存在しません。私が使用できるエレガントな代替手段があれば、あなたの洞察をいただければ幸いです。

9
user919426

エンティティにbyte[]フィールドを保持することをお勧めします。クラスは、データベース構造を可能な限り模倣する必要があります。過去にこれと同様のことを行った1つの方法は、別のクラスファイルを作成し(エンティティはpartialであることを忘れないでください)、2番目のファイルにNotMappedプロパティを追加することです。ゲッターとセッターにobjectからbyte[]への変換を行わせることができ、コードでは、EFが無視するobjectプロパティと常に対話します。非常に簡単で、EFはvarbinaryフィールドを直接アクセスしないbyte[]まで追跡します。

18
DrewJordan