Question

Je suis aux prises avec un problème depuis quelques jours et je n'ai pas trouvé de solution.

J'ai une solution Visual Studio avec 2 projets, la première est une DLL avec mes objets métier et ma logique, l'autre projet est mon application WinForm et une dépendance de référence sur le premier projet.

J'ai initialement écrit les objets métier avec le mappage Attribute LINQ et tout fonctionnait bien. Ensuite, j'ai pensé essayer une cartographie externe. J'ai suivi quelques guides différents sur la façon dont cela devrait fonctionner; Cependant, chaque fois que j'exécutais le code dans ma solution, j'obtenais une InvalidOperationException: Mapping Problème: impossible de trouver le type 'Org.Example.System.Material' dans le mappage , lorsque WinForm tente de créer l'objet DataContext .

Après avoir essayé différentes configurations dans le fichier XML, j'ai placé une copie de la classe dans ma solution d'interface graphique sous un espace de noms différent, et cela a fonctionné. Ma question est la suivante: n’est-il pas possible de mapper un objet dans une bibliothèque de classes ou si c’est comment il est accompli?

Échantillons

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>

    

Chargement WinForm

XmlMappingSource mapping = XmlMappingSource.FromUrl("dbmap.xml");
mContext = new DataContext(Properties.Settings.Default.dbConn, mapping);
reloadTable();
Était-ce utile?

La solution

Je pense que le problème que vous pourriez rencontrer est que la bibliothèque assembleur / classe contenant vos classes n’a pas été chargée en mémoire à ce stade?

Essayez d'accéder à une classe de la bibliothèque avant d'instancier le contexte de données pour voir si cela fonctionne.

Autres conseils

J'ai le même problème. Nous avons un fichier de mappage qui mappe différents assemblages et nous obtenons l'erreur de mappage puisque tous les assemblages ne sont pas chargés en mémoire. Quelles sont les différentes solutions à ce problème?

J'ai lu qu'il est possible de référencer un type dans un assemblage différent en utilisant le paramètre AssemblyQualifiedName du type. Mais nous ne l'avons pas fait fonctionner. Si cela est possible, pouvez-vous donner un exemple de ce à quoi cela ressemblerait?

Une autre solution, je suppose, consiste à avoir un fichier de mappage pour chaque assemblage et à donner au fichier de données le fichier de mappage correct au moment de l'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top