2010-11-28 17 views
2

Im mise en place d'un fournisseur OData dans Visual Studio. L'erreur que je reçois n'a vraiment rien à voir avec OData.Pourquoi devrais-je obtenir "L'erreur" Le membre avec l'identité 'ReturnValue' n'existe pas dans la collection de métadonnées "?

J'ai un type de table dans mon entité ado modèle de données et chaque fois que je tente d'insérer un enregistrement dans ce tableau que je reçois l'erreur suivante:

{"The member with identity 'ReturnValue' does not exist in the metadata collection. Parameter name: identity"}

C'est le stacktrace:

at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Objects.ObjectContext.SaveChanges() at OData.CreateWorkOrder(Int32 CreatedByContactID) in D:\Web\OData.svc.vb:line 31

Quelqu'un at-il entendu parler de cette erreur? Je peux insérer bien dans n'importe quelle autre table il semble juste être cette table que le modèle de données d'entité d'ado ne veut pas jouer avec.

Merci à l'avance

''# this comment is just here because the code formatter doesn't play nice otherwise. 
<WebGet()> _ 
Public Function CreateWorkOrder(ByVal CreatedByContactID As Integer) As WorkOrder 
    Dim x As New MyAppEntities 

    Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(Nothing, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now) 
    x.AddToWorkOrders(wo) 
    x.SaveChanges() 
    Return wo 
End Function 
+0

Code s'il vous plaît (montrez-nous le contenu de OData.svc.vb dans et autour de la ligne 31). Comment soumettez-vous les données à la base de données. Il semble que vous essayez de soumettre "ReturnValue" lorsque le champ n'existe pas dans la base de données. –

+0

_ Fonction publique CreateWorkOrder (ByVal CreatedByContactID As Integer) Comme WorkOrder Dim x As New MyAppEntities Dim wo Comme WorkOrder = MyApp.WorkOrder.CreateWorkOrder (Rien, 100, 4, Faux, DateTime.Now, Faux, 0, 1, 0, 0, 0, 0, 0, 0, Faux, 0, 0, 0, Faux, CreatedByContactID, DateTime.Now, 1, DateTime.Now) x.AddToWorkOrders (wo) x.SaveChanges() Renvoi wo Fin Fonction – MattyD

+0

Si vous modifiez votre question d'origine, vous pouvez profiter du formatage du code dans l'éditeur de démarque. Je ne peux pas vraiment lire ça. –

Répondre

0

Je suppose que c'est la ligne de erroring

Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(Nothing, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now) 

Maintenant, le premier paramètre est « rien » dans lequel je suppose qu'il est censé le la " Valeur renvoyée "d'une procédure stockée (utilisez-vous des procédures stockées?).

Si vous êtes en fait à l'aide d'une procédure stockée avec quelque chose comme @ID int output, alors vous avez besoin d'un paramètre de sortie approprié dans votre code

 Dim IDOut As Integer 
     Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(IDOut, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now) 

     ''# Do crap with IDOut like redirect to http://example.com?workorder=[IDOut] 

Mais comme je l'ai dit dans mon commentaire, vous feriez mieux d'utiliser LINQ to SQL et évitant les procédures stockées pour les insertions simples.

Quelque chose le long des lignes de

Public Sub GenerateWorkOrder() 

     Dim workOrder As New WorkOrder 
     With workOrder 
      .somestringParameter1 = "the parameter" 
      .someintegerParameter1 = 5 
      ''# etc 
     End With 

     CreateWorkOrder(workOrder) 
     SubmitChanges() 

    End Sub 


    Public Sub CreateWorkOrder(ByVal workOrder As WorkOrder) 
     ''# dc is simply the DataContext 
     dc.WorkOrders.InsertOnSubmit(workOrder) 
    End Sub 

    Public Sub SubmitChanges() 
     dc.SubmitChanges() 
    End Sub 
0

Identité clé est sensible à la casse. Pls vérifier est-il correctement fourni en tant que paramètre. Exemple:

context.mCustomersReference.EntityKey = new EntityKey("BulkEntities.CustomerSet", "CustomerId", Convert.ToInt64(id));