Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приведенные ниже сведения предоставляют некоторые проблемы, которые могут возникнуть в приложениях 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() метод в собственном частичном классе.