2011-02-02 4 views
2

J'ai besoin de remplir une table Pure Junction (contenant uniquement FK pour d'autres tables) lorsqu'un événement EntityDataSource _Inserted est déclenché.Entity Framework comment utiliser la propriété de navigation

J'ai 3 tables dans ma base de données:

CmsJobs (JobId) 
CmsJobsUsers (JobId FK, UserId FK)* 
aspnet_Users (UserId) 

* CmsJobsUsers est un PURE JONCTION TABLE et ce ne sont pas représentés comme une entité dans le modèle EF.

Voici mon code, je ne suis pas en mesure d'enregistrer ces données dans CmsJobsUsers.

protected void uxEntityDataSourceCreateJob_Inserted(object sender, EntityDataSourceChangedEventArgs e) 
{ 
    Guid myUserListSelected = new Guid(uxListUsers.SelectedValue);// Guid for UserId in DropDownList 
    CmsJob myJob = (CmsJob)e.Entity; // My new Jobid 
    aspnet_Users myUser = new aspnet_Users(); 
    myUser.UserId = myUserListSelected; 
} 

Une idée? Merci de votre aide!

Voici une ressource utile: Mais je ne suis pas en mesure de implment il: http://thedatafarm.com/blog/data-access/inserting-many-to-many-relationships-in-ef-with-or-without-a-join-entity/

Répondre

2

Vous n'êtes pas montrer votre EDM, mais votre entité CmsJob devrait avoir une propriété de navigation aspnet_Users et l'entité aspnet_User devrait avoir un propriété de navigation CmsJobs. La manière la plus simple d'insérer une entité dans la table de jonction est d'extraire un utilisateur de la base de données, d'ajouter un CmsJob à la collection CmsJobs et de sauvegarder l'utilisateur.

Encore une fois, vous n'êtes pas montrer votre tentative de persister quoi que ce soit à la DB, alors je vais écrire une suggestion:

protected void uxEntityDataSourceCreateJob_Inserted(object sender, EntityDataSourceChangedEventArgs e) 
{ 
    using (var context = new YourEFObjectContext()) 
    { 
     Guid myUserListSelected = new Guid(uxListUsers.SelectedValue); 
     CmsJob myJob = (CmsJob)e.Entity; // My new Jobid 
     aspnet_Users myUser = context.aspnet_Users.Single(u => u.UserId == myUserListSelected); 
     myUser.CmsJobs.Add(myJob); 
     context.SaveChanges(); 
    } 
} 
+0

merci maintenant il fonctionne – GibboK

Questions connexes