我已经创建了一个表
CREATE TABLE [dbo].[tab1](
[Id] [int] NOT NULL,
[Name] [varchar](100) NOT NULL,
[Meta] [xml] NULL,
CONSTRAINT [PK_tab1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
当我执行 linq to sql 查询以获取数据时,它抛出错误“根级别的数据是无效的 linq”。在进一步调查中,我了解到在这种情况下元列为空。实际上它是可为空的我是否必须删除可为空并将一些空白根节点设置为默认值或者是否有其他方法可以消除错误。
我的 linq 查询抛出错误
var obj1= (from obj in dbContext.tab1s
where obj.id== 123
select obj).FirstOrDefault<Tab1>();
最佳答案
如果 XML 列的值为 NULL
,在任何情况下您都不会收到此错误。
但是,如果该字段包含错误提示的格式错误的 XML,您将收到此错误。
SQL Server 允许您这样做:
UPDATE tab1
SET Meta = 'blah'
WHERE id = 123
显然字符串“blah”是无效的 XML,但 SQL Server 仍然允许它。 Linq to SQL 不会,因为它会尝试将该 XML 实际加载到 XElement
中。如果您使用该列中的值运行查询,您将得到完全相同的错误,根级别的数据无效。
为了修复此错误,您需要修复数据库中存在的格式错误的 XML。
关于c# - 可空 xml 列的 Linq to sql 错误 "Data at the root level is invalid ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341629/