2010-08-05 2 views
4

J'ai un DB existant avec une relation de clé étrangère unidirectionnelle très simple entre deux tables. Je dois créer des classes avec des mappages qui fonctionneront avec la base de données existante.Comment mapper des clés étrangères à l'aide d'une structure d'entité CTP4 Annotations POCO avec une base de données existante

CREATE TABLE OfflinePackage (
     PackageID int, 
     Name nvarchar(100) 
     ... 

CREATE TABLE OfflinePackageDocument (
     PackageDocumentID int, 
     PackageID int, --- FK references OfflinePackage.PackageID 
     ... 

Je définis une classe pour chacune de ces tables. Je veux utiliser les annotations (ou api couramment si je dois) pour cartographier la OfflinePackageDocument.PackageID clé étrangère OfflinePackage.PackageID

Je suis en train d'utiliser l'annotation associésà:

public class OfflinePackageDocument 
{ 
     [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
     public int PackageDocumentID { get; set; } 

     [RelatedTo(Property = "PackageID")] 
     public virtual OfflinePackage Package { get; set; } 

     ... 

} 

public class OfflinePackage 
{ 
    [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
    public int PackageID { get; set; } 

    ... 
} 

Mais je obtenir cette erreur pendant ModelBuilder.CreateModel():

La propriété de navigation 'PackageID' qui a été spécifiée par la valeur RelatedToAttribute.Property est introuvable sur le type associé 'OfflinePackage'.

PackageID est certainement une propriété de OfflinePackage.

Je ne peux pas comprendre ce que je fais mal ici.

Répondre

1

J'ai compris comment faire ce travail. Tout d'abord, il doit y avoir une propriété int PackageID dans la classe OfflinePackageDocument (elle correspond directement à la clé étrangère dans la table). Ensuite, vous pouvez ajouter la propriété de navigation "Virtual OfflinePackage Package", en indiquant le PackageID nouvellement ajouté en tant que clé étrangère.

public class OfflinePackageDocument 
{ 
    [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
    public int PackageDocumentID { get; set; } 

    public int PackageID { get; set; } // This must exist - maps directly to the DB field 

    [RelatedTo(ForeignKey = "PackageID")] 
    public virtual OfflinePackage Package { get; set; } // Now we can define this navigation property 

    .... 
} 
+0

merci je me cognais juste la tête à ce sujet. J'obtenais des colonnes en double sur plusieurs clés étrangères qui mappaient vers le même objet ... par exemple, CreatedBy, ModifiedBy, les deux mappages vers l'objet User me donnaient 2 colonnes pour chacun. Cela l'a corrigé –

Questions connexes