过去几天我一直在努力解决问题,但没有找到解决方案。

我有一个包含2个项目的Visual Studio解决方案,第一个是带有业务对象和逻辑的DLL,另一个项目是我的WinForm应用程序,以及对第一个项目的引用依赖项。

我最初用属性LINQ映射编写了业务对象,一切正常。然后我想我会尝试外部映射。我按照几个不同的指南来说明它应该如何工作;但是,每次我在我的解决方案中运行代码时,我都会得到 InvalidOperationException:Mapping问题:当WinForm尝试创建DataContext对象时,无法从映射中找到类型'Org.Example.System.Material'

在XML文件中尝试不同的配置后,我将该类的副本放入我的GUI解决方案中,并在不同的命名空间下运行。我的问题是,是否无法在类库中映射对象,或者它是如何完成的。

样品

<强> 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();
有帮助吗?

解决方案

我认为您可能遇到的问题是,此阶段包含您的类的汇编/类库尚未加载到内存中?

在实例化数据上下文之前尝试访问库中的类,看看是否有效。

其他提示

我有同样的问题。我们有一个映射文件来映射不同的程序集,我们得到映射错误,因为所有的assempl都没有加载到内存中。这个问题有哪些不同的解决方案?

我已经读过可以使用类型的AssemblyQualifiedName引用不同程序集中的类型。但我们没有让它发挥作用。如果这是可能的,你能举例说明这会是什么样的吗?

我想,另一个解决方案是为每个程序集创建一个映射文件,并在运行时为datacontext提供正确的映射文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top