LINQ de mapeamento externo à Biblioteca Classe
Pergunta
Eu estive lutando com um problema para os últimos dias e não ter encontrado uma solução.
Eu tenho uma solução Visual Studio com 2 projectos, o primeiro é um DLL com meus objetos de negócios e lógica, o outro projeto é o meu aplicativo WinForm, e uma dependência de referência no primeiro projeto.
I inicialmente escreveu os objetos de negócios com mapeamento Atributo LINQ e tudo estava funcionando bem. Então eu pensei que eu tentaria mapeamento externo. Eu segui alguns guias diferentes sobre como ele deve funcionar; No entanto, toda vez que eu corri o código na minha solução que eu iria receber um InvalidOperationException: Mapeamento Problema: Não é possível localizar tipo 'Org.Example.System.Material' de mapeamento , quando as tentativas WinForm para criar o objeto DataContext .
Depois de tentar diferentes configurações no arquivo XML eu coloquei uma cópia da classe em minha solução GUI sob um namespace diferente e funcionou. A minha pergunta é, não é possível mapear um objeto em uma biblioteca de classe ou se é como é realizado.
As amostras
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 Carregando
XmlMappingSource mapping = XmlMappingSource.FromUrl("dbmap.xml");
mContext = new DataContext(Properties.Settings.Default.dbConn, mapping);
reloadTable();
Solução
Eu acho que o problema que você pode estar recebendo é que a montagem / biblioteca de classe que contém suas classes não foi carregado na memória nesta fase?
Tente acessar uma classe na biblioteca antes de instanciar o contexto de dados para ver se funciona.
Outras dicas
Eu tenho o mesmo problema. Temos um arquivo de mapeamento que mapeia diferentes montagens e temos o erro de mapeamento uma vez que todos assemplies não são carregados na memória. Quais são as diferentes soluções para este problema?
Eu li que é possível fazer referência a um tipo em um conjunto diferente usando o AssemblyQualifiedName do tipo. Mas nós não fazê-lo funcionar. Se isso for possível, você pode dar um exemplo de que isso seria semelhante?
Outra solução, eu acho, é ter um arquivo de mapeamento para cada conjunto e dar o datacontext o arquivo de mapeamento correto em tempo de execução.