LINQ для классов SQL, не совместимых с CLS?
-
22-07-2019 - |
Вопрос
Я использую LINQ to SQL в качестве уровня доступа к данным для нового проекта.Я добавил свои таблицы базы данных в конструктор, и все в порядке.
Всякий раз, когда я использую один из этих классов в функции, Visual Studio предупреждает меня, что "Тип xxxx не соответствует CLS" или что "Возвращаемый тип функции xxxx не соответствует CLS"
Это проблема с классами, которые генерирует LINQ to SQL?Имеет ли это значение?Могу ли я отключить эти предупреждения в любом месте?Мой список ошибок VS забит этими предупреждениями, из-за чего трудно увидеть что-либо еще.
Редактировать:
Извините, я должен был упомянуть, что это VB.NET проекты.:)
Решение
У Бена М. есть правильное представление о проблеме.
Самый быстрый способ решить эту проблему на VB.Net project - сделать сборку не совместимой с CLS и, следовательно, избежать этих предупреждений.Добавление следующей строки к любому из ваших файлов сделает свое дело
<Assembly: CLSCompliant(False)>
Лучший файл для его добавления - AssemblyInfo.vb внутри папки "Мой проект".
Другие советы
Я нашел эта ссылка на MSDN Connect:
При добавлении отношений наследования между классами в O / R designer уровень доступа к сгенерированному элементу резервного хранилища идентификатора атрибут "_Id" изменен с private на protected, что приводит к CLS нарушению правил.Свойство Id используется в ассоциации между классами.
Если вы хотите избавиться от предупреждений, вы можете использовать:
#pragma warning disable 3021
Или, если вы хотите отключить их по всему проекту, добавьте 3021 в поле "Подавлять предупреждения" на вкладке "Сборка" свойств вашего проекта в Visual Studio.
В конечном счете это зависит от того, какие типы возвращаются вашей базой данных и каковы имена этих типов.
Одной из проблем, касающихся соответствия CLS, является тип, который имеет два общедоступных элемента, которые отличаются по имени только регистром, напримерМое поле и мое поле.
Вот статья это должно помочь вам определить где у вас возникли проблемы с соответствием CSS, и разберитесь с ними.Если вам нужна дополнительная помощь, напишите какой-нибудь код, и мы посмотрим, что мы можем сделать.
Обычно я вижу эту ошибку, когда я использую типы из одной сборки, которая не имеет Податливый атрибут в другой сборке, который выполняет.
То есть, являются ли ваши классы Linq to SQL в другом проекте, чем функции, которые вы пишете?Вы уточнили [assembly: CLSCompliant(true)]
в некоторых, но не во всех проектах вашего решения?