假设我有以下表格,并建立了正确的关系:
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是一个集合,而不是一个对象吗?
无法弄清楚原因。如何解决?
答案 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本身中建立关联。