簡體   English   中英

C#-使用Linq to SQL和XML序列化

[英]C# - Using Linq to SQL with XML Serialization

在對象的某些屬性上使用Linq進行SQL和XML序列化時,我不太了解。

我會定期創建表,然后使用Linq到SQL生成我的所有類。 但是現在由於我序列化了一些類屬性,因此在創建數據庫表時,我將這些屬性定義為varchar(用於XML字符串),而不是它們的實際類型。 因此,將使用字符串類型的屬性而不是實際的類來創建自動生成的類。

當從數據庫中插入/獲取對象時,有沒有辦法告訴Linq自動應用我的反序列化? 並在Linq自動生成的類中保留序列化屬性的原始類型?

例如一個類

注意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 to SQL生成具有字符串屬性的類。

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

我認為這是不可能的。

在這種情況下,您將不得不使用另一個對象來隱藏將對象存儲為Xml字符串這一事實。

所以:

  1. ClassA將具有ClassB類型的屬性。
  2. ClassC將是實際的linq類。 它看起來與ClassA相似,只是它不具有ClassB類型的屬性,而是一個string類型的字段。
  3. 保存時,將ClassA映射到ClassC。 在這里您可以將ClassB序列化為Xml。
  4. 閱讀時,將ClassC映射到ClassA。 在此將xml反序列化為ClassB。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM