Внешнее сопоставление LINQ с библиотекой классов
Вопрос
Я боролся с проблемой последние пару дней и не нашел решения.
У меня есть решение 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 типа.Но нам не удалось заставить его работать.Если это возможно, можете ли вы привести пример того, как это будет выглядеть?
Я полагаю, что другое решение — иметь один файл сопоставления для каждой сборки и предоставить контексту данных правильный файл сопоставления во время выполнения.