LINQ to SQL - Linq пытается вставить столбец, который не существует - PullRequest
0 голосов
/ 27 января 2012

Я создал простую схему базы данных в 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.Вот краткий список с полями, сгенерированными из схемы базы данных.

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

1 Ответ

2 голосов
/ 27 января 2012

Волшебства нет: Szkola должно быть где-то в вашем dbml-файле. Откройте этот файл в текстовом редакторе (если вы используете Visual Studio, щелкните правой кнопкой мыши и выберите «Открыть с помощью ...», затем «Текстовый редактор»). Теперь найдите Szkola и удалите его из XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...