Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Приведенные ниже сведения предоставляют некоторые проблемы, которые могут возникнуть в приложениях LINQ to SQL, и предоставляют рекомендации, чтобы избежать или уменьшить влияние этих проблем.
Дополнительные проблемы рассматриваются в часто задаваемых вопросых.
Неподдерживаемые стандартные операторы запросов
LINQ to SQL не поддерживает все стандартные методы оператора запросов (например, ElementAt). В результате проекты, которые компилируются, по-прежнему могут создавать ошибки среды выполнения. Дополнительные сведения см. в разделе "Стандартный перевод операторов запросов".
Проблемы с памятью
Если запрос включает коллекцию в памяти и LINQ to SQL Table<TEntity>, запрос может выполняться в памяти в зависимости от порядка, в котором указаны две коллекции. Если запрос должен выполняться в памяти, необходимо извлечь данные из таблицы базы данных.
Такой подход неэффективн и может привести к значительному использованию памяти и процессора. Старайтесь избежать таких запросов с несколькими доменами.
Имена файлов и SQLMetal
Чтобы указать имя входного файла, добавьте имя в командную строку в качестве входного файла. Включение имени файла в строку подключения (с помощью параметра /conn ) не поддерживается. Дополнительные сведения см. в разделеSqlMetal.exe (средство создания кода).
Проекты библиотеки классов
Конструктор реляционных объектов создает строку подключения в app.config файле проекта. В проектах библиотек классов app.config файл не используется. LINQ to SQL использует строку подключения, указанную в файлах времени разработки. Изменение значения app.config не изменяет базу данных, к которой подключается ваше приложение.
Каскадное удаление
LINQ to SQL не поддерживает или распознает операции каскадного удаления. Если вы хотите удалить строку в таблице с ограничениями, необходимо выполнить одно из следующих действий:
Задайте правило в ограничении
ON DELETE CASCADEвнешнего ключа в базе данных.Используйте собственный код, чтобы сначала удалить дочерние объекты, которые препятствуют удалению родительского объекта.
В противном случае будет выброшено исключение SqlException.
Дополнительные сведения см. в разделе "Практическое руководство. Удаление строк из базы данных".
Выражение не подлежит запросу
Если вы получите ошибку "Выражение [выражение] нельзя запросить; возможно, отсутствует ссылка на сборку?", убедитесь в следующем:
Приложение предназначено для .NET Compact Framework 3.5.
У вас есть ссылка на
System.Core.dllиSystem.Data.Linq.dll.У вас есть директива
Imports(Visual Basic) илиusing(C#) для System.Linq и System.Data.Linq.
DuplicateKeyException
В процессе отладки проекта LINQ to SQL вы можете исследовать связи сущности. Это позволяет перенести эти элементы в кэш, и LINQ to SQL становится известно о их присутствии. Если вы попытаетесь выполнить Attach или InsertOnSubmit, или аналогичный метод, который создает несколько строк с одинаковым ключом, выбрасывается DuplicateKeyException.
Исключения объединения строк
Объединение операндов, сопоставленных с [n]text и других, сопоставленных с [n][var]char, не поддерживается. Выбрасывается исключение для конкатенации строк, которые соответствуют двум разным наборам типов. Дополнительные сведения см. в разделе "Методы System.String".
Пропуск и выполнение исключений в SQL Server 2000
При использовании IsPrimaryKey или Take необходимо использовать члены идентификатора (Skip) в базе данных SQL Server 2000. Запрос должен быть обращённым к одной таблице (то есть, не соединение), или быть операцией Distinct, Except, Intersect, или Union, и не должен включать операцию Concat. Дополнительные сведения см. в разделе "Поддержка SQL Server 2000" в трансляции стандартного оператора запроса.
Это требование не применяется к SQL Server 2005.
GroupBy исключение InvalidOperationException
Это исключение возникает, если значение столбца равно NULL в запросе GroupBy, который группирует по выражению boolean, например group x by (Phone==@phone). Поскольку выражение является boolean, ключ выводится как boolean, а не nullableboolean. При преобразованном сравнении создается значение NULL, предпринимается попытка назначить объект nullableboolean a boolean, и создается исключение.
Чтобы избежать этой ситуации (при условии, что вы хотите рассматривать значения NULL как false), используйте такой подход, как показано ниже.
GroupBy="(Phone != null) && (Phone=@Phone)"
Частичный метод OnCreated()
Созданный метод OnCreated() вызывается каждый раз при вызове конструктора объектов, включая сценарий, в котором LINQ to SQL вызывает конструктор, чтобы сделать копию для исходных значений. Учитывайте это поведение, если вы реализуете OnCreated() метод в собственном частичном классе.