调用WCF RIA Service的结果是空值,即使URI调用有效
本文关键字:调用 即使 URI 有效 空值 结果是 WCF RIA Service | 更新日期: 2023-09-27 18:02:02
使用WCF RIA服务,我感觉自己一次又一次地碰壁。
我有一个WCF RIA服务方法,它根据你传递给它的ID参数返回雇员。它使用ajax调用URI,使用:
/WCF_RIA_ServiceData.svc/GetEmployeeByID?EmployeeID=1
我想在MVC控制器中使用相同的查询,所以我试过了:
// GET: /Employee/Details/5
public ActionResult Details(int id)
{
WCF_RIA_ServiceData y = new WCF_RIA_ServiceData();
WCF_RIA_ServiceDataService z = new WCF_RIA_ServiceDataService();
WCF_RIA_Project.Employee employee = (WCF_RIA_Project.Employee)y.GetEmployeeByID(id);
WCF_RIA_Project.Employee employee2 = (WCF_RIA_Project.Employee)z.GetEmployeeByID(id);
ViewData["EmployeeID"] = id;
ViewData["EmployeeFirstName"] = employee.FirstName;
ViewData["EmployeeLastName"] = employee.LastName;
return View();
}
下面是WCF RIA服务中的方法:
[Query(HasSideEffects = true)]
public IQueryable<WCF_RIA_Project.Employee> GetEmployeeByID(int? EmployeeID)
{
var empData = from Employee in this.Context.Employees
where Employee.Id == EmployeeID
select new WCF_RIA_Project.Employee
{
ID = Employee.Id,
FirstName = Employee.FirstName,
LastName = Employee.LastName
};
return empData;
}
我已经尝试了很多方法来得到这个返回正确的数据,但我每次都得到null。我是不是漏掉了什么?
我见过使用数据库上下文的其他示例,但我找不到任何方法让我的MVC应用程序看到它。任何帮助都非常感谢!
编辑:因为这个项目是作为一个Lightswitch应用程序开始的,所以我通过oData公开了Employees表,并且查询oData服务会得到完全相同的结果(null)。
ApplicationData appdata = new ApplicationData();
Employee employee = appdata.Employees_Single(id);
我能够解决这个问题,似乎我的主要问题是在错误的名称空间。默认的是自动生成的Lightswitch Implementation(我想?)
下面是所有的工作代码,如果你感兴趣的话:
控制器方法: public ActionResult Details(int id)
{
WCF_RIA_Project.WCF_RIA_Service wcfria = new WCF_RIA_Project.WCF_RIA_Service();
WCF_RIA_Project.Employee employee = wcfria.GetEmployeeByID(id);
ViewData["EmployeeID"] = id;
ViewData["EmployeeFirstName"] = employee.FirstName;
ViewData["EmployeeLastName"] = employee.LastName;
return View();
}
WCF RIA服务方法:
[Query(IsComposable=false)]
public Employee GetEmployeeByID(int? EmployeeID)
{
var empData = from Employee in this.Context.Employees
where Employee.Id == EmployeeID
select new Employee
{
ID = Employee.Id,
FirstName = Employee.FirstName,
LastName = Employee.LastName
};
return empData.Single();
}