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;
        (...)
    }

LINQ to SQL-LINQ试图插入一列;不存在

没有魔法:Szkola必须在dbml文件中的某个位置。在文本编辑器中打开该文件(如果使用Visual Studio,请右键单击并选择"打开方式…",然后选择"文本编辑器")。现在搜索Szkola,并将其从XML中删除。