Проблема LINQ to SQL с битами / логическими значениями - PullRequest
1 голос
/ 04 декабря 2009

У меня проблема с LINQ2Sql, когда значение в базе данных не попадает в мой код правильно. Все в порядке, за исключением столбцов, определенных как битовое поле в базе данных. В моем коде после запроса LINQ значение для битовых полей всегда ложно. Что, черт возьми, происходит?

Я уже пытался удалить таблицу из desigener SQL и затем добавить ее обратно, но это не имеет значения.

Я смотрю на данные таблицы в SQL Server Mgmt Studio, и значения для моих битовых столбцов верны: 1 для true, 0 для false. Если я отредактирую таблицу в Mgmt Studio, в правильных местах будет True / False. Если я запускаю свой запрос в LINQ Pad, он возвращает правильные значения. Если я зайду в отладчик и возьму SQL из результатов LINQ, я получу правильные результаты при запуске!

Вот мой код LINQ ...

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

Вот мои определения таблиц ...

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.

Не то чтобы столбец Plan.ThingId указывал на Things.ThingId как FK. Столбцы проблемы: Things.ValidEnvelope и Things.IsValid.

Вот XML из файла 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>

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Запустите SQL Server Profiler, проверьте точный генерируемый запрос, скопируйте этот точный запрос и запустите его в Management Studio.

Эта процедура определенно должна дать тот же результат. Однако, я думаю, вы обнаружите, что даже до того, как зайти так далеко, вы можете, возможно, вообще не видеть запрос. Это может быть кэшировано где-то по пути, или база данных, к которой вы подключаетесь в вашем проекте, может быть не той, о которой вы думаете (проверьте, какая строка подключения используется в свойствах dbml, а затем проверьте эту строку в проекте. настройки, а также проверьте наличие возможных перезаписей в вашем файле web.config)

0 голосов
/ 08 декабря 2009

Нашел проблему в другой части кода. Глупая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...