Внешнее сопоставление LINQ с библиотекой классов

StackOverflow https://stackoverflow.com/questions/205711

  •  03-07-2019
  •  | 
  •  

Вопрос

Я боролся с проблемой последние пару дней и не нашел решения.

У меня есть решение Visual Studio с двумя проектами: первый — это DLL с моими бизнес-объектами и логикой, другой проект — мое приложение WinForm и ссылочная зависимость от первого проекта.

Изначально я написал бизнес-объекты с сопоставлением атрибутов LINQ, и все работало нормально.Тогда я подумал, что попробую внешнее картографирование.Я следовал нескольким различным руководствам о том, как это должно работать;однако каждый раз, когда я запускал код в своем решении, я получал сообщение ИнвалидОператионИсключение:Проблема с отображением:Невозможно найти тип «Org.Example.System.Material» в сопоставлении., когда WinForm пытается создать объект DataContext.

Попробовав разные конфигурации в XML-файле, я поместил копию класса в свое решение с графическим интерфейсом в другое пространство имен, и это сработало.Мой вопрос в том, невозможно ли сопоставить объект в библиотеке классов или как это сделать.

Образцы

dbmap.xml

<Database xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007" Name="Gravel_Dev"><Table Name="dbo.Materials" Member="Material">
<Type Name="Org.Example.System.Material">
  <Column Name="MaterialID" Member="MaterialID" Storage="mMaterialID" DbType="UniqueIdentifier NOT NULL" IsDbGenerated="true" IsPrimaryKey="true"/>
  <Column Name="Code" Member="Code" Storage="mMaterialCode" DbType="Char(4)"/>
  <Column Name="Description" Member="Description" Storage="mDescription" DbType="VarChar(50)"/>
  <Column Name="UnitPrice" Member="UnitPrice" Storage="mUnitPrice" DbType="Decimal(5,2)"/>
</Type>

Загрузка WinForm

XmlMappingSource mapping = XmlMappingSource.FromUrl("dbmap.xml");
mContext = new DataContext(Properties.Settings.Default.dbConn, mapping);
reloadTable();
Это было полезно?

Решение

Я думаю, что проблема, с которой вы можете столкнуться, заключается в том, что библиотека сборок/классов, содержащая ваши классы, не загружена в память на этом этапе?

Попробуйте получить доступ к классу в библиотеке, прежде чем создавать экземпляр контекста данных, чтобы проверить, работает ли это.

Другие советы

У меня та же проблема.У нас есть файл сопоставления, который сопоставляет разные сборки, и мы получаем ошибку сопоставления, поскольку не все сборки загружены в память.Каковы различные решения этой проблемы?

Я читал, что можно ссылаться на тип в другой сборке, используя AssemblyQualifiedName типа.Но нам не удалось заставить его работать.Если это возможно, можете ли вы привести пример того, как это будет выглядеть?

Я полагаю, что другое решение — иметь один файл сопоставления для каждой сборки и предоставить контексту данных правильный файл сопоставления во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top