2010-02-26 3 views
3

J'ai créé une table commeLINQ to SQL Error « données au niveau racine est non valide » pour la colonne nullable xml

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] 

Quand je fais LINQ to requête SQL pour récupérer une donnée, il jette une erreur " les données au niveau de la racine sont linq invalides ". Dans une enquête plus approfondie, je viens de savoir que la méta-colonne est nulle dans ce cas. En réalité, il est nullable Dois-je supprimer le nullable et définir un nœud racine vide par défaut ou il existe un autre moyen de se débarrasser de l'erreur.


Ma requête LINQ qui jette l'erreur

 var obj1= (from obj in dbContext.tab1s 
    where obj.id== 123 
select obj).FirstOrDefault<Tab1>(); 
+0

Pourriez-vous fournir la requête Linq? –

Répondre

2

En aucun cas, vous recevrez cette erreur si la valeur d'un La colonne XML est NULL.

Vous recevrez cependant cette erreur si le champ contient du code XML mal formé, comme le suggère l'erreur.

SQL Server vous permet de le faire:

UPDATE tab1 
SET Meta = 'blah' 
WHERE id = 123 

Il est évident que la chaîne "bla" est XML non valide, mais SQL Server permet encore. Linq to SQL ne fonctionne pas, car il va essayer de charger ce XML dans un XElement. Si vous exécutez la requête avec cette valeur dans la colonne, vous obtiendrez exactement la même erreur, Les données au niveau de la racine sont incorrectes. Pour corriger cette erreur, vous devez corriger le code XML mal formé présent dans la base de données.

+0

Thx Aaonaught, j'ai eu ma réponse –

0

Le créer a [tab1] mais votre sélection a [tab1s]