我遇到LINQ2Sql的问题,数据库中的值无法正确访问我的代码。除了在数据库中定义为位字段的列外,一切正常。在LINQ查询之后的代码中,位字段的值始终为false。到底是怎么回事?
我已经尝试从SQL设计器中删除该表,然后将其重新添加,但这没有什么区别。
我查看SQL Server Mgmt Studio中的表数据,并且我的位列的值是正确的:1表示true,0表示false。如果我在Mgmt Studio中编辑表,它在正确的位置有True / False。如果我在LINQ Pad中运行我的查询,它将返回正确的值。如果我进入调试器并从LINQ结果中获取SQL,那么当我运行它时,我得到了正确的结果!
这是我的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.
不是Plans.ThingId列指向Things.ThingId为FK。问题列是Things.ValidEnvelope和Things.IsValid。
这是dbml文件中的XML ....
<?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 :(得分:1)
运行SQL Server Profiler,检查正在生成的确切查询,复制该确切查询,然后在Management Studio中运行它。
该程序肯定会产生相同的结果。我认为你会发现,甚至在那么远之前,你可能根本就没有看到查询。它可能会在途中缓存,或者您在项目中连接的数据库可能不是您认为的那个(检查dbml-properties中正在使用哪个连接字符串,然后在项目中检查该字符串)设置,并检查web.config中的潜在覆盖
答案 1 :(得分:0)
在代码的另一部分中发现了问题。愚蠢的错误。