Не удается получить коллекцию в классе сущностей - PullRequest
2 голосов
/ 31 августа 2009

Предположим, у меня есть следующие таблицы с построением правильных отношений:

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

Затем изменил сгенерированный код для GetEmployee с помощью .NET RIA Services, например:

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

Атрибут [Включить] добавлен для EmployeeAddress в Employee и Адрес в EmployeeAddress.

При запуске кода на стороне клиента Silverlight со следующим кодом:

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

У меня ничего нет. Если я уберу включение из GetEmployee, например:

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

Работает нормально.

Для члена поиска в Employee, например, Пол

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

Работает отлично. Здесь Employee.Gender - это один объект. Это потому, что Employee.EmployeeAddress - это коллекция, а не один объект?

Не могу понять причину. Как это решить?

Ответы [ 3 ]

0 голосов
/ 02 сентября 2009

Используете ли вы службы 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 Services может использовать для создания ассоциации.

Дополнительная информация

0 голосов
/ 30 сентября 2009

Я почти уверен, что вы не можете редактировать метод GetEmployee (). Скорее вы должны создать новый метод с именем: GetEmployeeAddress ()

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

Нечто подобное. Брэд также прав, но я бы предложил создать ассоциации в средстве просмотра модели или в самой БД.

0 голосов
/ 31 августа 2009

Вы должны использовать атрибут IncludeAttribute для свойства, представляющего коллекцию в классе метаданных приятеля. Большинство примеров услуг RIA демонстрируют это.

Это стремительная загрузка, а не отложенная загрузка. Я предполагаю, что это то, что вы имели в виду, поскольку отложенная загрузка с распределенного сервера, как правило, не очень хорошая идея.

...