簡體   English   中英

LINQ to SQL - Linq嘗試插入不存在的列

[英]LINQ to SQL - Linq tries to insert column which doesn't exist

我在Visual Studio中創建了一個簡單的數據庫模式並部署到SQL Server。 然后我通過從服務器資源管理器將所有表拖到我的模型上來創建Linq-to-SQL映射。

過了一段時間,我決定從鏈接表中刪除一列。 我修改了模式,刪除了數據庫並再次部署它。 我通過從圖中刪除所有實體並再次拖動所有表來重新創建我的映射。

問題是,當我嘗試向該表插入新實體(我刪除了我的列)時,Linq-to-SQL仍嘗試在那里插入一個值並觸發SQL Exception,說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中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM