簡體   English   中英

將實體框架屬性映射到數據庫中的 XML

[英]Map Entity Framework properties to XML in database

我有一個這樣的課程:

public class GeneralClass
{
    public int Id {get; set;}
    public string Name {get; set;}
}

這是一個非常通用的類。 我也有一個這樣的派生類:

public class DerivedClass: GeneralClass
{ 
    public int SpecificProperty {get; set;}
    public string AnotherSpecificProperty {get; set;}
    public bool BooleanSpecificProperty {get;set;}
}

問題是,我的應用程序中可以有很多派生類(超過 10 個),這就是為什么數據庫中的繼承不是一個選項。 我想出的解決方案是將GeneralClass作為一個表,其中包含一個包含特定屬性的 XML 列。

像這樣的東西:

CREATE TABLE 
General(Id int primary key, 
        Name nvarchar(50),  
        SpecificProperties xml);

其中特定屬性包含派生類的屬性。

問題是:如何使用實體框架保存和查詢此 xml 列,並將 xml 反序列化為屬性?

“......我的應用程序中可以有很多派生類(超過 10 個),這就是為什么數據庫中的繼承不是一個選項” -為什么不!?

有兩種主要的繼承模式 -每層級表(TPH) 和每類型表(TPT)。 雖然第一個可能看起來相當浪費 SQL 資源,但第二個可能符合您的要求。 還有一種模式 -每個具體類型的表(TPC),它可以被認為是 TPT 的變體。 您的層次結構中沒有抽象類,或者至少您發布的代碼片段沒有,因此使用 TPT 並以您非常熟悉的方式查詢是很自然的,比如 LINQ to entity。 此處此處有關 EF 和繼承模式的更多信息。

盡管如此,如果您堅持使用 XML,您可以將該字段聲明為 XML 類型(這是 SQL 服務器支持的列數據類型)。 您可以按照此處此處此處所述進行查詢。

暫無
暫無

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

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