.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之间的转换都非常昂贵. 如果有人有任何更好的想法,我仍然愿意接受建议. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |