LINQ to SQL-LINQ试图插入一列;不存在
本文关键字:一列 不存在 SQL-LINQ to 插入 LINQ | 更新日期: 2023-09-27 18:21:29
我在Visual Studio中创建了一个简单的数据库架构,并将其部署到SQL Server中。然后,我通过从服务器资源管理器将所有表拖到我的模型上,创建了Linq到SQL的映射。
过了一段时间,我决定从链接表中删除一列。我修改了架构,删除了数据库并重新部署了它。我通过从图表中删除所有实体并再次拖动所有表来重新创建映射。
问题是,当我试图将新实体插入该表(我在该表上删除了列)时,Linq-to-SQL仍然试图在那里插入一个值,这会触发SQL异常,称Szkola
列名无效。我仔细检查了实体图——那里没有Szkola
列的符号,IntelliSense也没有显示Szkola
可能存在。但在检查生成的SQL之后(在调用.SubmitChanges()
之后):
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]
我清理了几次解决方案,删除并重新创建了几次映射和数据库,但都无济于事。为什么会发生这种情况,以及如何解决这个问题?
编辑1:
我按照dasblinkenlight的说明,通过文本编辑器查看*.dbml文件。由于Szkola
列是一个验证表,我在其他表中发现了它的一些出现,但在Uczen_Opiekun
链接表中(这导致了问题),我没有找到任何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>
编辑2:
根据评论的建议,我检查了生成的Uczen_Opiekun
实体。并没有Szkola
列,但它仍然存在于Linq生成的insert语句中。下面是一个简短的列表,其中包含从数据库模式生成的字段。
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Uczen_Opiekun")]
public partial class Uczen_Opiekun : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private string _UczenPESEL;
private string _OpiekunPESEL;
private string _StopienPokrewienstwa;
private EntityRef<Opiekun> _Opiekun;
private EntityRef<Uczen> _Uczen;
(...)
}
没有魔法:Szkola
必须在dbml文件中的某个位置。在文本编辑器中打开该文件(如果使用Visual Studio,请右键单击并选择"打开方式…",然后选择"文本编辑器")。现在搜索Szkola
,并将其从XML中删除。