2016-10-14 15 views
0

Linq to SQLとXMLのシリアル化を使用してで私のオブジェクトのプロパティの一部をと理解していないことがあります。C# - LinqからSQLへのXMLシリアル化の使用

私はテーブルを作成し、Linqを使ってすべてのクラスを生成します。しかし、私はいくつかのクラスプロパティをシリアル化して以来、データベーステーブルを作成するとき、私はこれらのプロパティを実際の型ではなくvarchar(XML文字列用)として定義します。したがって、自動生成されたクラスは実際のクラスではなく文字列型のプロパティで作成されます。

データベースからオブジェクトを挿入/フェッチする際にLinqに自動的にde/serializationを適用する方法はありますか? Linq自動生成クラスのシリアル化されたプロパティの元の型を保持しますか?

AクラスclassBPropタイプClassBのである例えば

注意。

class ClassA 
{ 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private ClassB classBProp; // <-- This is something i'm serializing 
    public ClassB ClassBProp 
    { 
     get { return classBProp; } 
     set { classBProp = value; } 
    } 

    public ClassA() 
    { 
     classBProp = new ClassB(); 
    } 
} 

クラス

用テーブルここClassBProp varchar型のものです。 LinqからSQLへと文字列プロパティを持つクラスが生成されます。

CREATE TABLE [dbo].[ClassA] (
[Id]   INT   NOT NULL, 
[Name]  VARCHAR (50) NULL, 
[ClassBProp] VARCHAR (MAX) NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

答えて

1

私はこれが可能ではないと思います。

このような状況では、オブジェクトをXml文字列として格納しているという事実を隠す別のオブジェクトを使用する必要があります。

ので:

  1. にClassAはClassBの種類のプロパティを持つことになります。
  2. ClassCが実際のlinqクラスになります。 ClassAのように見えますが、ClassB型のプロパティを持たず、文字列型のフィールドを持っている点が異なります。
  3. 保存するときは、ClassAをClassCにマッピングします。これはClassBをXmlとしてシリアライズするところです。
  4. 読むときは、ClassCをClassAにマッピングします。ここではxmlをClassBとして非直列化します。

私は役立つことを望みます。

+0

ありがとう!私はこれを行うより適切な方法があると思った。しかし、それはそれが行われている方法だと私はそれで大丈夫です。ちょうど明確にする – moonlander

+0

申し訳ありませんが、間違って投稿しました。 保存する際には、ClassCインスタンスを作成してからdataContext.ClassAs.InsertOnSubmit(classCInstance)を作成するだけです。 – moonlander

+0

そして、私はシリアライズされたオブジェクトをミラーリングするために、デシリアライズされたオブジェクトのコレクション全体を作成する必要があります。または、すべてのオブジェクトにアクセスするときにdeserializeメソッドを適用します。それが正しい? – moonlander

関連する問題