2

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

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 中的地址添加了属性 [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 是一个集合,而不是单个对象吗?

想不通原因。如何解决?

4

3 回答 3

0

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

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

于 2009-08-31T17:06:33.367 回答
0

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

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

类似的东西。Brad 也是对的,但我建议在模型查看器或数据库本身中进行关联。

于 2009-09-29T21:34:36.163 回答
0

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

[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 类都有一个“EmployeeId”属性,RIA 服务可以使用该属性来创建关联。

更多信息

于 2009-09-02T14:56:21.950 回答