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();
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top