object
型のプロパティを持つ型がある状況があります。
public class MyType
{
public virtual object MyProp{get; get;}
}
このタイプは次のようにする必要があります。
Entity Framework
を使用してbyte[]
としてデータベースに保存しました(シリアル化ロジックを理解しました)KnownType
属性を使用します)object
プロパティをマップして、ストレージ用のバイト配列に変換されるようにするにはどうすればよいですか?
注:object
プロパティは値型(非複雑)になります
データベースに保存するための別のタイプを作成することを考えました。例:
public class MyTypeEntity
{
public virtual byte[] MyProp{get; get;}
}
リレーションシップマッピングを定義しながら、タイプ間で変換/変換するにはどうすればよいですか?
これには、保存時に何らかの傍受が含まれますか?
背を向けることなく考えられる最善の解決策は、シリアル化されたデータをDBに保存することです。
C#に何らかの形式のproperty covariance
があった場合、これはおそらく簡単に機能したでしょう。私の知る限り、それは存在しません。私が使用できるエレガントな代替手段があれば、あなたの洞察をいただければ幸いです。
エンティティにbyte[]
フィールドを保持することをお勧めします。クラスは、データベース構造を可能な限り模倣する必要があります。過去にこれと同様のことを行った1つの方法は、別のクラスファイルを作成し(エンティティはpartial
であることを忘れないでください)、2番目のファイルにNotMapped
プロパティを追加することです。ゲッターとセッターにobject
からbyte[]
への変換を行わせることができ、コードでは、EFが無視するobject
プロパティと常に対話します。非常に簡単で、EFはvarbinary
フィールドを直接アクセスしないbyte[]
まで追跡します。