我正在模型优先模式中使用 Entity Frameworks 4.0 (CTP5) 构建 ORM。我的一些实体具有不需要是 ORM 实体的复杂(对象树)属性——它们只对使用该数据库的后端服务器系统感兴趣,而不是对使用该数据库的客户端感兴趣。
我可以将属性的对象树序列化为字符串并将其作为字符串存储在数据库中,但是 SQL Server XML 数据类型确实很有吸引力。如果能够以智能方式查询 XML 数据内容,那就太好了。
但是,我没有看到任何方式来指定我需要 Visual Studio Entity Modeler 中的 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 类型的影子属性应该可行,但每次更改原始字符串属性 (Resume) 和新影子属性 (CandidateResume) 时,字符串和 XML 之间的转换都非常昂贵。
如果有人有更好的想法,我仍然愿意接受建议。
关于.net - 如何在 Entity Frameworks 4.0 模型中指定 SQL Server XML 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149024/