由于以下情况,我的4个CRUD服务中有3个*失败了。 我正在使用C#与linq和WCF数据服务。 我有以下操作合同:
[OperationContract]
void DeleteRecord(int vehicleIDDel);
[OperationContract]
VehicleStockItem SearchVehicleRecord(int vehicleID);
[OperationContract]
void UpdateVehicleDetails(int vehicleIDUpd);
究竟发生了什么:我正在尝试通过控制台应用程序执行基本的crud过程。更新&删除服务同时工作但停止程序运行。我的意思是,他们将更新和删除传递给他们的任何ID但是都阻止程序运行,因为查询似乎传回一个空序列,或者如果使用FirstOrDefault传回一个不是null的null元素允许根据调试器。
这两项服务的代码如下:
public void DeleteRecord(int vehicleIDDel)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleIDDel
select v)
.FirstOrDefault();
db.VehicleStockItems.Remove(vehicle);
db.SaveChanges();
}
public void UpdateVehicleDetails(int vehicleIDUpd)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleIDUpd
select v).FirstOrDefault();
vehicle.Sold = true;
db.SaveChanges();
}
正如我所说,这两个实际上都改变了他们应该记录的记录,但都抛出错误并阻止程序运行。
更新错误: http://s23.postimg.org/cgvzax0nf/update_Error.jpg
删除错误: http://s28.postimg.org/dbdkb6m59/delete_Error.jpg
接下来是检索服务。
这根本不起作用,即使我将值直接放入WCF测试客户端也不行。
我为此服务提供的代码如下:
public VehicleStockItem SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).FirstOrDefault();
return vehicle;
}
当我在存在的记录上运行它时,会出现以下错误: http://s28.postimg.org/i67o5aowt/error_WCF.jpg
有人可以解释我哪里出错了,以及为什么我会收到这些错误。请在您的答案中提供示例,因为我非常熟悉这种语言并使用WCF数据服务。
如果您需要更多信息,请询问。
编辑:
这是提交删除的内容:
Console.Write("Enter ID of Vehicle to delete: ");
int vehicleIDDel = int.Parse(Console.ReadLine());
vehicleRef.DeleteRecord(vehicleIDDel);
答案 0 :(得分:0)
这两个截图,一个用于更新,一个用于删除,因为当您在查询中说FirstOrDefault()以拉回车辆时:
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).FirstOrDefault();
此处vehicle为null,因此当您调用其上的属性时,它为null并抛出此异常。研究的问题是为什么vehicleID不匹配......