将实体框架属性映射到数据库中的XML

时间:2017-08-19 20:11:42

标签: c# xml asp.net-mvc entity-framework

我有一个这样的课程:

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);

其中特定属性包含派生类的属性。

问题是:如何使用Entity Framework保存和查询此xml列,并将xml反序列化为属性? 先谢谢!!

1 个答案:

答案 0 :(得分:2)

“... 我的应用程序中可以有很多派生类(超过10个),这就是为什么数据库中的继承不是选项” - 为什么不呢!吗

有两种主要的继承模式 - 每个层次结构的表(TPH)和每种类型的表(TPT)。虽然第一个可能看起来相当浪费SQL资源,但第二个可能符合您的要求。还有一种模式 - 每个具体类型的(TPC),可以认为是TPT的变体。您的层次结构中没有抽象类,或者至少您发布的代码片段没有,因此使用它是很自然的 LINQ对实体说,TPT和查询你非常熟悉的方式。有关EF和继承模式的更多信息herehere

但是,如果你坚持使用XML,你可以将该字段声明为XML类型(这是一种列数据类型,SQL服务器支持)。您可以按照hereherehere所述进行查询。