2009-02-28 6 views
0

Je suis en train de cartographier ma hiérarchie d'héritage à DB en utilisant LINQ to SQL: L'héritage est comme ça, les classes sont POCO, sans LINQ aux attributs SQL:héritage de la carte de la classe générique LINQ to SQL

public interface IStage 
{ ... } 

public abstract class SimpleStage<T> : IStage where T : Process 
{ ... } 

public class ConcreteStage : SimpleStage<ConcreteProcess> 
{ ... } 

Voici la mise en correspondance:

<Database Name="NNN" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"> 
    <Table Name="dbo.Stage" Member="Stage"> 
    <Type Name="BusinessLogic.Domain.IStage"> 
     <Column Name="ID" Member="ID" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" /> 
     <Column Name="StageType" Member="StageType" IsDiscriminator="true" /> 
     <Type Name="BusinessLogic.Domain.SimpleStage" IsInheritanceDefault="true"> 
     <Type Name="BusinessLogic.Domain.ConcreteStage" IsInheritanceDefault="true" InheritanceCode="1"/> 
     </Type> 
    </Type> 
    </Table> 
</Database> 

Dans l'exécution, j'obtiens l'erreur: System.InvalidOperationException était unhandled message = "problème Mapping: Impossible de trouver le type d'exécution pour le mappage de type « BusinessLogic.Domain.Simpl eStage '. "

Ni spécification SimpleStage, ni SimpleStage <T> dans le fichier de mappage permet - l'exécution continue à produire différents types d'erreurs.

DC est créé comme ceci:

StreamReader sr = new StreamReader(@"MappingFile.map"); 
XmlMappingSource mapping = XmlMappingSource.FromStream(sr.BaseStream); 
DataContext dc = new DataContext(@"connection string", mapping); 

Si LINQ to SQL ne supporte pas, pourriez-vous, s'il vous plaît, un autre conseiller ORM, qui fait. Merci d'avance,

Cordialement!

Ksenia

Répondre

0

Avez-vous ajouté la référence aux fichiers et sont aussi vous importer les références à l'utilisation des déclarations? OU en utilisant les noms de classe entièrement qualifiés?

+0

désolé, je ne comprenais pas tout à fait, quelles sont les références que vous parlez? si vous voulez décorer mes classes avec des attributs liés à LINQ, alors non, j'utilise des classes POCO et fournissez uniquement le mappage dans le fichier XML –

+0

Désolé, je veux dire Projet-> Ajouter une référence, puis sélectionnez l'assembly pour BusinessLogic.Domain.IStage importer la bibliothèque comme utilisant BusinessLogic.Domain; –

+0

oh, bien sûr, j'ajoute la référence à l'ensemble BL et toutes les utilisations nécessaires –

0

Je pense que c'est à cause du type générique T dans SimpleStage: il ne peut pas produire en interne une table de correspondance de mapping pour SimpleStage car T est générique.

+0

oui, je pense aussi que c'est en raison de générique. mais je me demandais s'il y avait un moyen d'effectuer la cartographie en quelque sorte, peut-être en utilisant d'autres ORM –

1

J'ai trouvé la réponse moi-même, après avoir regardé dans IL de mon cours générique. Dans IL son nom ressemble SimpleStage`1 < ...> donc le problème avec le fichier de mappage a été fixé quand j'ai écrit

<Type Name="BusinessLogic.Domain.SimpleStage`1" ...