質問
過去数日間、問題に苦労してきましたが、解決策が見つかりませんでした。
2つのプロジェクトを持つVisual Studioソリューションがあります。最初のプロジェクトはビジネスオブジェクトとロジックを含むDLL、もう1つのプロジェクトはWinFormアプリケーション、および最初のプロジェクトへの参照依存関係です。
最初に属性LINQマッピングを使用してビジネスオブジェクトを記述しましたが、すべて正常に機能していました。その後、外部マッピングを試してみようと思いました。私はそれがどのように機能するかについていくつかの異なるガイドに従いました。ただし、ソリューションでコードを実行するたびに、WinFormがDataContextオブジェクトを作成しようとすると、 InvalidOperationException:マッピングの問題:マッピングからタイプ '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();
解決
あなたが得ているかもしれない問題は、あなたのクラスを含むアセンブリ/クラスライブラリがこの段階でメモリにロードされていないことだと思いますか?
データコンテキストをインスタンス化する前にライブラリ内のクラスにアクセスして、機能するかどうかを確認してください。
他のヒント
同じ問題があります。さまざまなアセンブリをマッピングするマッピングファイルがあり、すべてのアセンブリがメモリにロードされていないため、マッピングエラーが発生します。この問題のさまざまな解決策は何ですか?
型のAssemblyQualifiedNameを使用して別のアセンブリの型を参照することが可能な読み取りがあります。しかし、私たちはそれを機能させませんでした。これが可能であれば、これがどのようになるか例を示してください。
別の解決策は、各アセンブリに1つのマッピングファイルを用意し、実行時にdatacontextに正しいマッピングファイルを提供することです。