2009-12-04 7 views
1

Je rencontre un problème avec LINQ2Sql lorsque la valeur de la base de données ne parvient pas correctement à mon code. Tout est OK sauf pour les colonnes définies comme un champ de bits dans la base de données. Dans mon code après la requête LINQ, la valeur des champs de bits est toujours false. Que diable se passe t'il?Problème LINQ to SQL avec bits/booléens

J'ai déjà essayé de supprimer la table du programme de développement SQL, puis de l'ajouter à nouveau, mais cela ne fait aucune différence.

Je regarde les données de table dans SQL Server Mgmt Studio, et les valeurs pour mes colonnes de bit sont correctes: 1 pour vrai, 0 pour faux. Si je modifie la table dans Mgmt Studio, elle a True/False aux bons endroits. Si j'exécute ma requête dans LINQ Pad, elle renvoie les valeurs correctes. Si je vais dans le débogueur et récupère le SQL des résultats LINQ, j'obtiens les bons résultats quand je lance ça!

Voici mon code LINQ ...

 var theplan = (from plans in _data.Plans 
         where plans.PlanId.ToString() == sId 
         select plans).FirstOrDefault(); 

Voici mes définitions de table ...

CREATE TABLE [dbo].[Things](
    [ThingId] [uniqueidentifier] NOT NULL, 
    [ValidEnvelope] [bit] NOT NULL, 
    [Xmax] [float] NOT NULL, 
    [Xmin] [float] NOT NULL, 
    [Ymax] [float] NOT NULL, 
    [Ymin] [float] NOT NULL, 
    [IsValid] [bit] NOT NULL, 
CONSTRAINT [PK_Things] PRIMARY KEY CLUSTERED .... etc. 

CREATE TABLE [dbo].[Plans](
    [PlanId] [uniqueidentifier] NOT NULL, 
    [Name] [varchar](50) NOT NULL, 
    [Created] [datetime] NOT NULL, 
    [Modified] [datetime] NOT NULL, 
    [ThingId] [uniqueidentifier] NOT NULL, 
    [ViewStateId] [uniqueidentifier] NOT NULL, 
CONSTRAINT [PK_plans] PRIMARY KEY CLUSTERED ... etc. 

Non pas que les points de colonne Plans.ThingId à Things.ThingId comme FK. Les colonnes de problème sont Things.ValidEnvelope et Things.IsValid.

Voici le XML à partir du fichier dbml ....

<?xml version="1.0" encoding="utf-8"?> 
<Database Name="XXXX" Class="XXXXDbDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007"> 
    <Connection Mode="AppSettings" ConnectionString="......" .... /> 
    <Table Name="dbo.ViewStates" Member="ViewStates"> 
    <Type Name="ViewState"> 
     <Column Name="ViewStateId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> 
     <Column Name="Xmax" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Xmin" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Ymax" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Ymin" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Association Name="ViewState_Plan" Member="Plans" ThisKey="ViewStateId" OtherKey="ViewStateId" Type="Plan" /> 
    </Type> 
    </Table> 
    <Table Name="dbo.Plans" Member="Plans"> 
    <Type Name="Plan"> 
     <Column Name="PlanId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> 
     <Column Name="Name" Type="System.String" DbType="VarChar(50) NOT NULL" CanBeNull="false" /> 
     <Column Name="Created" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" /> 
     <Column Name="Modified" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" /> 
     <Column Name="ThingId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" /> 
     <Column Name="ViewStateId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" /> 
     <Association Name="ViewState_Plan" Member="ViewState" ThisKey="ViewStateId" OtherKey="ViewStateId" Type="ViewState" IsForeignKey="true" /> 
     <Association Name="Thing_Plan" Member="Thing" ThisKey="ThingId" OtherKey="ThingId" Type="Thing" IsForeignKey="true" /> 
    </Type> 
    </Table> 
    <Table Name="dbo.Things" Member="Things"> 
    <Type Name="Thing"> 
     <Column Name="ThingId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> 
     <Column Name="ValidEnvelope" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" /> 
     <Column Name="Xmax" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Xmin" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Ymax" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="Ymin" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" /> 
     <Column Name="IsValid" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" /> 
     <Association Name="Thing_Plan" Member="Plans" ThisKey="ThingId" OtherKey="ThingId" Type="Plan" /> 
    </Type> 
    </Table> 
</Database> 
+0

Pouvez-vous montrer le dbml qui correspond à cela? (c'est xml) Aussi - je suppose que 'IsValid' et' ValidEnvelope' sont dans le code * généré * (et pas votre propre code personnalisé)? –

+0

Pourriez-vous fournir plus de tests unitaires qui montrent que cela ne fonctionne pas? –

+0

Aussi - votre exemple C# concerne * plans *, pas * choses * - pouvez-vous montrer comment vous accédez à vos "choses" pour voir le problème? –

Répondre

-1

Trouvé le problème dans une autre partie du code. Erreur stupide.

1

Run Profiler SQL Server, vérifiez la dernière requête qui est généré, copiez cette requête exacte, et l'exécuter dans Management Studio.

Cette procédure devrait certainement donner le même résultat. Ce que je pense que vous trouverez, avant même d'aller aussi loin, c'est que vous pourriez ne pas voir la question du tout. Il peut être mis en cache quelque part en cours de route ou la base de données à laquelle vous vous connectez n'est peut-être pas celle que vous pensez (vérifiez quelle chaîne de connexion est utilisée dans les propriétés dbml, puis vérifiez cette chaîne dans le projet paramètres, et vérifiez également les écrasements potentiels dans votre web.config)