2010-09-25 102 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。

您需要在查詢和模型元數據中包含引用。

希望這會有所幫助。