我在Visual Studio中创建了一个简单的数据库模式并部署到SQL Server。然后我通过从服务器资源管理器将所有表拖到我的模型上来创建Linq-to-SQL映射。
一段时间后,我决定从链接表中删除一列。我修改了模式,删除了数据库并再次部署它。我通过从图中删除所有实体并再次拖动所有表来重新创建我的映射。
问题是,当我尝试向该表插入新实体(我删除了我的列)时,Linq-to-SQL仍尝试在那里插入一个值并触发SQL异常,说{{ 1}}列名无效。我仔细检查了实体图 - 那里没有Szkola
列的符号,IntelliSense也没有显示Szkola
可能存在。但是在检查生成的SQL之后(在调用Szkola
之后):
.SubmitChanges()
我几次清理了解决方案,多次删除并重新创建了映射和数据库,没有任何帮助。为什么会这样,以及如何解决这个问题?
编辑1:
我按照 dasblinkenlight 说明操作,并通过文本编辑器查看* .dbml文件。我在其他表中发现了几个INSERT INTO [dbo].[Uczen_Opiekun]([UczenPESEL], [OpiekunPESEL], [StopienPokrewienstwa], [Szkola])
VALUES (@p0, @p1, @p2, @p3)
-- @p0: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [10987654321]
-- @p1: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [12345678910]
-- @p2: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [ojciec]
-- @p3: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [Null]
列的出现,因为它是一个验证表,但是在Szkola
链接表中(导致问题)我没有找到任何Uczen_Opiekun
个引用... < / p>
Szkola
根据评论的建议,我检查了生成的<Table Name="dbo.Uczen_Opiekun" Member="Uczen_Opiekuns">
<Type Name="Uczen_Opiekun">
<Column Name="UczenPESEL" Type="System.String" DbType="VarChar(11) NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="OpiekunPESEL" Type="System.String" DbType="VarChar(11) NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="StopienPokrewienstwa" Type="System.String" DbType="VarChar(64)" CanBeNull="true" />
<Association Name="Opiekun_Uczen_Opiekun" Member="Opiekun" ThisKey="OpiekunPESEL" OtherKey="PESEL" Type="Opiekun" IsForeignKey="true" />
<Association Name="Uczen_Uczen_Opiekun" Member="Uczen" ThisKey="UczenPESEL" OtherKey="PESEL" Type="Uczen" IsForeignKey="true" />
</Type>
</Table>
实体。没有Uczen_Opiekun
列,但它仍存在于Linq生成的insert语句中。这是一个简短的列表,其中包含从数据库模式生成的字段。
Szkola
答案 0 :(得分:2)
没有魔法:Szkola
必须位于dbml文件中的某个位置。在文本编辑器中打开该文件(如果使用Visual Studio,右键单击并选择“打开方式...”,然后选择“文本编辑器”)。现在搜索Szkola
,并将其从XML中删除。