2009-03-17 4 views
1

Je tente d'utiliser ADO.NET Data Services pour mettre à jour ma base de données.Ajout d'une référence à une table de recherche dans ADO.NET Data Services

Tables:

  • personne (PK personID, FK EntityRootId)
  • EntityRoot (PK EntityRootId, FK EntityTypeId)
  • EntityTypes (PK) EntityTypeId

Je suis en train de créer un EntityRoot (nom malheureux car il peut être confondu avec Entity Framework Entity.) EntityRoot est dans mon domaine et l'ajouter à la base de données:

var entRoot = EntityRoot.CreateEntityRoot(
    0, "Lou", DateTime.Now, "Lou", DateTime.Now); 
var entityType = 
    (from type in myContext.EntityTypeSet 
    where (type.Description == "Person") 
    select type).FirstOrDefault(); // this works fine and returns the entityType I’m looking for 

entRoot.EntityType = entityType; 
myContext.AddToEntityRootSet(entRoot); 

// with the line below I get a runtime error: 
// “AddLink and DeleteLink methods only work when the sourceProperty is a collection.” 
//myContext.AddLink(entRoot, "EntityType", entityType); 

// without the line above I get an error from the save: 
// “Entities in 'MyEntities.EntityRootSet' participate in the 'FK_EntityRoots_EntityTypeId_Lookup_EntityTypes' 
// relationship. 0 related 'EntityTypes' were found. 1 'EntityTypes' is expected.” 
myContext.BeginSaveChanges(SaveChangesOptions.Batch, 
         new AsyncCallback(OnSaveAllComplete), 
         null); 

Comment puis-je ajouter une référence au champ entRoot.EntityTypeId?

Merci pour tout commentaire à ce sujet.

Répondre

4

Je pense que lorsque vous faites cela, vous devez utiliser SetLink au lieu de AddLink, car la propriété que vous indiquez va de Entity à EntityType (une Entity a un EntityType).

Voici à peu près ce que le message d'erreur vous dit (AddLink ne fonctionne que sur les propriétés de Collection, comme la propriété reverse de type à entity, ou pour plusieurs à plusieurs relations).

+0

Oui, merci c'est le problème. La sauvegarde s'est parfaitement déroulée. – Weej

0

Est-ce juste une faute de frappe dans votre question ou devrait-il être

myContext.AddLink(entRoot, "EntityTypes", entityType); 

Au début de votre question, vous écrivez « EntityTypes » (avec et se terminant par « s »).

+0

Oui, vous avez raison, c'est une faute de frappe. Cela n'affecte pas l'exemple. Bien que je déteste les méthodes qui prennent des chaînes comme des valeurs comme ça. BTW, merci pour le formatage de ma question correctement. Je l'ai essayé plusieurs fois et je n'ai pas réussi. Je pense qu'il peut y avoir un problème de navigateur: J'utilise IE8. – Weej

+0

Je suis content que vous ayez trouvé la solution en utilisant la réponse de Denis. Question interessante! – splattne