2010-09-01 3 views
0

J'ai deux objets ... et si je compile un programme avec l'un ou l'autre, ça fonctionne bien, mais quand ils existent tous deux dans le même programme, je reçois l'exception ..L'entité participe déjà à une autre relation, Entity Framework CodeOnly

"Les entités dans 'ObjectContext.UnitSet' participent à la relation 'Sheet_Statistics', 0 'Sheet' a été trouvé, 1 'Sheet' est attendu."

class Unit 
{ 
public int Id; 
public string Name; 
} 
class Template 
{ 
public int Id; 
public virtual ICollection<Unit> Units 
} 

class Sheet 
{ 
public int Id; 
public virtual ICollection<Unit> Units 
} 

ensuite leurs configurations ..

TemplateConfiguration: EntityConfiguration // ....

 //// map the collection entity 
     HasMany(k => k.Units).WithRequired() 
      .Map("template.units", 
       (template, unit) => new 
       { 
        Template = template.Id, 
        Unit = unit.Id 
       }); 

SheetConfiguration: EntityConfiguration // ....

 //// map the collection entity 
     HasMany(k => k.Units).WithRequired() 
      .Map("sheet.units", 
       (sheet, unit) => new 
       { 
        Sheet = sheet.Id, 
        Unit = unit.Id 
       }); 

UnitConfiguration : EntityConfiguration<Unit> 
// 
      // Initialize the Primary Key 
      HasKey(k => k.Id); 
      // Initialize that the Key Increments as an Identity 
      Property(k => k.Id).IsIdentity(); 


var templates = new List<Template> 
       { 
        new Template 
        { 
         Name = // .., 
         Units = new List<Unit> 
         { 
          new Unit 
          { 
           // ... 
          } 
         } 
        } 
       }; 
       templates.ForEach(x => 
       { 
        context.Templates.Add(x); 
       }); 
       context.SaveChanges(); // <-- Exception Happens Here, I never even get to try to add Sheets. 
+1

Où est le code qui lève réellement l'exception? –

+0

Lorsque j'essaie d'ajouter un modèle à la base de données, et d'appeler "SaveChanges()" sur le contexte. – Ciel

+0

Je suis avec Craig sur celui-ci, vous devez fournir plus de code pour cela. Est-ce honnêtement tout le code de cartographie? – TheCloudlessSky

Répondre

2

Je prends un coup à ce parce que sans voir tous votre code, je ne peux pas résoudre beaucoup plus de celui-ci. Je pense que votre problème est que vous êtes créantUnit s mais ne définissant pas une sorte de propriété Sheet (vous devez fournir tout votre code entité/config). Vous devez créer le Sheet et Unittous les deux avant de pouvoir enregistrer le Unit ou Sheet car ils ont une référence requise (d'où l'erreur que vous obtenez). Si vous fournissez plus de code, je pourrai améliorer ma réponse.

+0

Votre théorie semble bonne, j'ai mis à jour le code. Il n'y a littéralement rien de plus que des parenthèses de fermeture/d'ouverture et des chaînes spécifiques à ajouter qui ont quelque chose à voir avec ce code. – Ciel

+0

@Stacey - Je pense que vous devez vous assurer que votre schéma de base de données correspond à ce que vous essayez de mapper. Quelque part le long de la ligne, les choses ne correspondent pas. Par exemple, qu'est ce que 'Sheet_Statistics'? – TheCloudlessSky

+0

Il n'y a rien appelé Sheet_Statistics! C'est le problème. Je ne faisais même pas de draps. Cependant, je vais essayer de changer WithRequired() en WithOptional() et voir si je peux obtenir des résultats différents. – Ciel

Questions connexes