Domanda

Ho avuto problemi con un problema negli ultimi due giorni e non ho trovato una soluzione.

Ho una soluzione Visual Studio con 2 progetti, il primo è una DLL con i miei oggetti e la mia logica di business, l'altro progetto è la mia applicazione WinForm e una dipendenza di riferimento dal primo progetto.

Inizialmente ho scritto gli oggetti business con la mappatura Attributo LINQ e tutto funzionava bene. Quindi ho pensato di provare la mappatura esterna. Ho seguito alcune guide diverse su come dovrebbe funzionare; tuttavia, ogni volta che eseguivo il codice nella mia soluzione, ottenevo un InvalidOperationException: Mapping Problema: impossibile trovare il tipo 'Org.Example.System.Material' dalla mappatura , quando WinForm tenta di creare l'oggetto DataContext .

Dopo aver provato diverse configurazioni nel file XML ho inserito una copia della classe nella mia soluzione GUI in uno spazio dei nomi diverso e ha funzionato. La mia domanda è: non è possibile mappare un oggetto in una libreria di classi o se è come viene realizzato.

I campioni

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>

    

Caricamento WinForm

XmlMappingSource mapping = XmlMappingSource.FromUrl("dbmap.xml");
mContext = new DataContext(Properties.Settings.Default.dbConn, mapping);
reloadTable();
È stato utile?

Soluzione

Penso che il problema che potresti avere sia che la libreria assembly / class contenente le tue classi non è stata caricata in memoria in questa fase?

Prova ad accedere a una classe nella libreria prima di creare un'istanza del contesto dei dati per vedere se funziona.

Altri suggerimenti

Ho lo stesso problema. Abbiamo un file di mappatura che mappa diversi assiemi e otteniamo l'errore di mappatura poiché tutti gli assenzio non vengono caricati in memoria. Quali sono le diverse soluzioni a questo problema?

Ho letto che è possibile fare riferimento a un tipo in un altro assembly utilizzando AssemblyQualifiedName del tipo. Ma non l'abbiamo fatto funzionare. Se questo è possibile, puoi fare un esempio di come sarebbe?

Un'altra soluzione, suppongo, è quella di avere un file di mapping per ciascun assembly e fornire al datacontext il file di mapping corretto in fase di esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top