Linq 无法在实体类中获取集合

Linq 无法在实体类中获取集合,linq,silverlight-3.0,service,ria,Linq,Silverlight 3.0,Service,Ria,假设我建立了以下具有正确关系的表: Employee(empID, ...) Address(AddresID, ...) EmployeeAddress(EmpID, AddressID, ...) 然后修改了.NET RIA服务为GetEmployee生成的代码,如: public IQueryable<Employee> GetEmployee() { var Employee = this.Context.Employee.Include("Empl

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

Employee(empID, ...)
Address(AddresID, ...)
EmployeeAddress(EmpID, AddressID, ...)
然后修改了.NET RIA服务为GetEmployee生成的代码,如:

public IQueryable<Employee> GetEmployee()
{           
 var Employee = this.Context.Employee.Include("EmployeeAddress").Include("Address");
 return Employee;
}
已为Employee中的EmployeeAddress和EmployeeAddress中的Address添加属性[包括]

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

EntityQuery<Employee> query = from e in ctx.GetEmployeeQuery()
                              select e;
我什么都没有。如果我从GetEmployee中删除include,例如:

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

用于查找员工中的成员,如性别

 public IQueryable<Employee> GetEmployee()
{           
 var Employee = this.Context.Employee.Include("GenderLookup");
 return Employee;
} 
它很好用。在这里,性别是一个单一的对象。是否因为Employee.EmployeeAddress是一个集合,而不是单个对象


我想不出原因。如何解决此问题?

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


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

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


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

你是否使用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服务可以使用该属性创建关联

更多信息


您是否使用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服务可以使用该属性创建关联

更多信息


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

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

差不多吧。Brad也是对的,但我建议在model viewer或DB本身上进行关联。

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

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

差不多吧。Brad也是对的,但我建议在model viewer或DB本身中进行关联。

谢谢您的更正。我有[包括]所有好友元数据。我会再试一次。谢谢你的更正。我有[包括]所有好友元数据。我会再试一次。