我在visual studio中设置OData提供程序。我收到的错误实际上与OData方面没有任何关系。
我的ado实体数据模型中有一个表类型,每当我尝试在此表中插入记录时,都会出现以下错误:
{“元数据集合中不存在具有标识'ReturnValue'的成员。 参数名称:identity“}
这是堆栈跟踪:
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter) 在System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 在System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项) 在System.Data.Objects.ObjectContext.SaveChanges() 在OData.CreateWorkOrder(Int32 CreatedByContactID)中 D:\ Web \ OData.svc.vb:第31行
有没有人听说过这个错误?我可以很好地插入到任何其他表中,它似乎只是这个ado实体数据模型不想玩的表。
提前致谢
''# 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 :(得分:0)
我假设这是错误行
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)
现在第一个参数是“Nothing”,我假设它应该是存储过程的“返回值”(你使用存储过程吗?)。
如果您实际上正在使用类似@ID int output
之类的存储过程,那么您需要在代码中使用正确的输出参数
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]
但正如我在评论中所说,你最好使用LINQ to SQL并避免使用Stored Procedures进行简单的插入。
的内容
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
答案 1 :(得分:0)
标识密钥区分大小写。请检查它是否作为参数正确提供。 例如:
context.mCustomersReference.EntityKey = new EntityKey("BulkEntities.CustomerSet", "CustomerId", Convert.ToInt64(id));