2012-04-23 3 views
1
[Table("Table1")] 
    public class Entity1 
    { 
     [Key, ForeignKey("entity1")] 
     public int ID{get;set;} 
     public virtual Entity2 entity2{get;set;} 
     public virtual Entity3 entity3{get;set;} 
    } 


Ceci est mon entité principale. Ici, je veux mapper cette entité avec Entity2 et 3 avec la même clé étrangère qui est également clé primaire dans Entity1,2,3.

Comment travailler avec une clé étrangère partagée dans EF

[Table("Table2")] 
    public class Entity2 
    { 
     [Key] 
     public int Entity1ID{get;set;} 
     // few entity specific properties 
    } 


[Table("Table3")] 
    public class Entity3 
    { 
     [Key] 
     public int Entity1ID{get;set;} 
     // few entity specific properties 
    } 


Quand puis utilisez ma classe de contexte pour la cartographie je reçois une erreur qui dit the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must

Répondre

2
modelBuilder.Entity<Entity1>().HasOptional(u => u.Entity2) 
          .WithRequired(); 
     modelBuilder.Entity<Entity1>().HasOptional(u => u.Entity2) 
          .WithRequired(); 


Si vous avez besoin seulement partagé la relation clé primaire, puis utilisez le code ci-dessus il n'y a rien de plus à faire, donc supprimer des attributs d'annotation.

-1

Vous ne pouvez pas avoir deux propriétés avec le même nom. Essayez ceci:

[Table("Table1")] 
public class Entity1 
{ 
    [Key, ForeignKey("Entity2"), ForeignKey("Entity3")] 
    pubic int ID{get;set;} 
    public virtual Entity2 Entity2{get;set;} 
    public virtual Entity3 Entity3{get;set;} 
} 

Btw. ça ressemble à un design très étrange.

+0

Erreur: attribut de clé étrangère en double – RollerCosta

+0

J'ai mis à jour ma question – RollerCosta

+0

Dans ce cas, essayez d'utiliser l'API Fluent à la place des attributs. –

Questions connexes