我想使用SQL Server xml类型作为实体类的列类型.
根据这个线程,可以将这样的列映射到字符串类型:
public class XmlEntity
{
public int Id { get; set; }
[Column(TypeName="xml")]
public string XmlValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
该定义在数据库中正确生成了该表.也可以创建新的XmlEntity对象.
但后来我尝试从数据库中获取一些实体:
var entity = db.XmlEntities.Where(e => e.Id == 1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
发生错误:
模型生成过程中检测到一个或多个验证错误 System.Data.Edm.EdmEntityType:的EntityType" 的XElement "没有定义键.定义此EntityType的键.
entity-framework entity-framework-4 xml-column ef4-code-only ef-code-first
是否可以使用Sql Server XML列替代真正的文档数据库(如Couch或Mongo)?
如果我要为文档创建一个带有guid PK Id和XML列的表.与使用文档数据库相比,主要问题是什么?
Sql Server支持对XML列进行索引,因此查询不应该是完全可怕的吗?
我这样做了:
Delete FROM MyTable WHERE ScopeValue = ""
Delete FROM G_Scope WHERE ScopeValue is ''
Delete FROM G_Scope WHERE ScopeValue = empty
Delete FROM G_Scope WHERE ScopeValue is empty
Run Code Online (Sandbox Code Playgroud)
我想用xml字段删除所有行(不可为空),其中ScopeValue列有空条目表示零字符.
有谁知道?
我尝试了解SQL Server 2008如何存储xml列以尝试估计产品中的表大小.
我正在使用DATALENGTH(xml_column)一些测试,结果令人不安:
Xml document length | Datalength | Bytes per character
175 | 366 | 2.09
15 | 38 | 2.53
314 | 414 | 1.31
Run Code Online (Sandbox Code Playgroud)
显然,xml列类型并不是nvarchar(max)伪装的,因为我已经在某处读过了.
它可能被压缩并存储为二进制,但无法找到任何地方.
有人可以解释一下xml列是如何存储在SQL Server 2008中的?
使用Sql Server Xml列以确保快速性能和易于报告的最佳实践是什么?
您如何设置该列?您是否将其保留为未键入状态?或将其与架构相关联?
将xml列与架构相关联是否可以提高查询性能?
我们对xml列的使用如下:
答:>在PER客户的基础上,我们可以定义其数据的灵活存储,而无需检查数据库。
B.>我们需要为每个返回客户数据的客户建立报表视图,就好像它是一个简单的表一样(对于Crystal报表或Sql Server Reporting Services)。
我们当前用于查询的语法如下:
SELECT
Id,
doc.value('@associatedId','nvarchar(40)') as AssocId,
doc.value('@name1', 'nvarchar(255)') as Name1,
doc.value('@name2', 'nvarchar(255)') as Name2,
doc.value('@name3', 'nvarchar(255)') as Name3,
doc.value('@number', 'nvarchar(255)') as Number
From OrderDetails
CROSS APPLY OrderDetails.XmlData.nodes('//root/reviewers/reviewer') as XmlTable(doc)
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?该查询在具有100万条记录的表中为我们运行的很慢,但是当前只有800条具有xml数据!
谢谢
皮特