2010-09-25 111 views
1

我试图在实体框架后端使用RIA服务。模型由设计者自动生成。 (VS 2010,.NET 4.0,EF 4.0,SilverLight 4.0) 我遇到的问题是引用属性按预期在服务层加载,但是当这些信息传递给SilverLight应用程序时,引用实体变为NULL。RIA服务:实体框架参考实体

我用两种方法来填充参考实体:

public Employee GetEmployeeByID(int employeeID) 
    { 
    var result = this.ObjectContext.Employees 
    .Include("EmployeeRoles") 
    .Where(emp => emp.EmployeeID == employeeID) 
    .FirstOrDefault(); 
    return result; 
    } 

而且

public Employee GetEmployeeByID(int employeeID) 
    { 
    var result = this.ObjectContext.Employees 
    .Where(emp => emp.EmployeeID == employeeID) 
    .FirstOrDefault(); 

    if (result != null && result.EmployeeRoleReference.IsLoaded == false) 
    { 
    result.EmployeeRoleReference.Load(); 
    } 
    return result; 
    } 

两种方法出现之前返回检查对象时正确填充参考对象。 但是,当我尝试通过RIA服务从UI引用Employee对象时,EmployeeRole引用的实体为NULL。

在前端我打电话:

public void LoadEmployeeProfile() 
    { 
    int empID = WebContext.Current.User.EmployeeID; 
    LoadOperation<Employee> loadEmployee = _appcontext.Load(_appContext.GetEmployeeByIDQuery(empID)); 
    loadEmployee.Complete += new System.EventHandler(loadEmployee_Completed); 
    } 

    void LoadEmployee_Completed(object sender, System.EventArgs e) 
    { 
    LoadOperation<Employee> loadEmployee = sender as LoadOperation<Employee>; 
    if (loadEmployee == null) 
    return; 

    loadEmployee.Completed -= LoadEmployee_Completed; 
    foreach (Employee employee in loadEmployee.Entities) 
    { 
    this.EmployeeProfile == employee; 
    break; 
    } 
    } 

这似乎是所有的教科书式的东西,但我一直没能追下去铅,为什么RIA服务不像我期望的那样填充引用实体。

回答

1

要澄清,您试图请求一个员工记录并包含由数据库/实体模型中的引用链接定义的EmployeeRoles。

在包含Employee的元数据的.Web RIA项目中,我会检查您是否在员工元数据中使用[Include]属性标记了EmployeeRoles。

您需要在查询和模型元数据中包含引用。

希望这会有所帮助。