无法在实体类中获取集合

时间:2009-08-31 17:00:23

标签: linq silverlight-3.0 service ria

假设我有以下表格,并建立了正确的关系:

Employee(empID, ...)
Address(AddresID, ...)
EmployeeAddress(EmpID, AddressID, ...)

然后通过.NET RIA Services修改生成的GetEmployee代码,如:

public IQueryable<Employee> GetEmployee()
{           
 var Employee = this.Context.Employee.Include("EmployeeAddress").Include("Address");
 return Employee;
}

为Employee中的EmployeeAddress和EmployeeAddress中的Address添加了属性[Include]。

使用以下代码在silverlight客户端运行代码时:

EntityQuery<Employee> query = from e in ctx.GetEmployeeQuery()
                              select e;

我一无所获。如果我从GetEmployee中删除包含,例如:

public IQueryable<Employee> GetEmployee()
{           
 var Employee = this.Context.Employee;
 return Employee;
} 

工作正常。

对于Employee中的查找成员,例如Gender

 public IQueryable<Employee> GetEmployee()
{           
 var Employee = this.Context.Employee.Include("GenderLookup");
 return Employee;
} 

工作正常。这里Employee.Gender是一个单一的对象。是因为Employee.EmployeeAddress是一个集合,而不是一个对象吗?

无法弄清楚原因。如何解决?

3 个答案:

答案 0 :(得分:0)

您必须在表示“伙伴”元数据类上的集合的属性上使用IncludeAttribute。大多数RIA服务示例都证明了这一点。

这是急切的加载,而不是延迟加载。我猜这就是你的意思,因为从分布式服务器延迟加载通常不是一个好主意。

答案 1 :(得分:0)

您是否正在使用RIA服务从服务器获取数据到您的客户端?如果是这样,那么您将需要使用元数据和[Association]属性,以便RIA Services识别这种关系。

[MetadataType(typeof(EmployeeMetadata))]
public partial class Employee
{
    public int EmployeeId {get; set; }
    public EmployeeAddress Address {get; set; }
}

public partial class EmployeeAddress
{
    public int EmployeeId {get; set; }
}

public class EmployeeMetaData
{
    [Include]
    [Association("EmployeeAddress", "EmployeeId", "EmployeeId")]
    public EmployeeAddress Address {get; set;}
}

上面的示例假设您的Employee类和Address类都具有RIA Services可用于创建关联的“EmployeeId”属性。

更多信息

答案 2 :(得分:0)

我很确定你不能编辑GetEmployee()方法。相反,您应该创建一个名为GetEmployeeAddress()

的新方法
public IQueryable<Employee> GetEmployeeAddress(string address)
{ 
    var Employee = this.Context.Employee.Where((x) => x.ID = address_ID)  
}

这样的事情。 Brad也是对的,但我建议在模型查看器或DB本身中建立关联。