.net – 如何在Entity Frameworks 4.0 Model中指定SQL Server XML数据类型?

前端之家收集整理的这篇文章主要介绍了.net – 如何在Entity Frameworks 4.0 Model中指定SQL Server XML数据类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Model-First模式中的Entity Frameworks 4.0(CT​​P5)构建ORM.我的一些实体具有复杂(对象树)属性,不需要是ORM实体 – 它们只对使用此数据库的后端服务器系统感兴趣,而不是对使用此数据库的客户端感兴趣.

我可以将属性的对象树序列化为字符串并将其作为字符串存储在DB中,但sql Server XML数据类型确实很吸引人.能够以智能方式查询XML数据内容将是非常好的.

但是,我没有看到任何方法在Visual Studio实体建模器中指定我想要XML数据类型.

是完成此操作以在模型中指定字符串字段,发出DDL,然后修改DDL以将字符串字段更改为XML字段的唯一方法吗?这似乎非常脆弱,只写一次,永远不会改变.有没有更好的办法?

解决方法

在“Entity Framework 4.0 Recipes”中,Larry Tenny和Zeeshan Hirani表示,EF 4.0根本不支持XML数据类型.

它们提供了一种解决方法,即使模型生成的实体类上的字符串类型属性为private,并创建一个新属性(在您自己的实体类的部分类中)以从内部字符串属性返回XElement:

public partial class Candidate
{
    private XElement candidateResume = null;

    public XElement CandidateResume
    {
        get 
        {
            if (candidateResume == null)
            {
                candidateResume = XElement.Parse(this.Resume);
                candidateResume.Changed += (s,e) =>
                {
                    this.Resume = candidateResume.ToString();
                }
            }

            return candidateResume;
        }

        set
        {
            candidateResume = value;
            candidateResume.Changed += (s,e) =>
            {
                this.Resume = candidateResume.ToString();
            }
            this.Resume = value.ToString();
        }
    }
}

像这样创建所需XML类型的shadow属性应该可行,但是在原始字符串属性(Resume)和新shadow属性(CandidateResume)的每次更改之间字符串和XML之间的转换都非常昂贵.

如果有人有任何更好的想法,我仍然愿意接受建议.

猜你在找的MsSQL相关文章