加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 如何在Entity Frameworks 4.0 Model中指定SQL Server XM

发布时间:2020-12-12 16:27:17 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用Model-First模式中的Entity Frameworks 4.0(CT??P5)构建ORM.我的一些实体具有复杂(对象树)属性,不需要是ORM实体 – 它们只对使用此数据库的后端服务器系统感兴趣,而不是对使用此数据库的客户端感兴趣. 我可以将属性的对象树序列化为字符串并将其作
我正在使用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之间的转换都非常昂贵.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读