MVC 2 с моделью данных объекта, возвращающей нуль для внешних ключей

#linq-to-sql #entity-framework #linq-to-entities

#linq-to-sql #entity-framework #linq-to-entities

Вопрос:

Я создаю свое первое приложение MVC 2. Я следовал примерам в книгах, которые у меня есть, и создал ADO.NET Модель данных объекта, которая автоматически сгенерировала файлы model.edms и model.designer.cs. Затем я создал файл repository.cs в моей папке model для хранения моих методов извлечения данных. Когда я использую эти методы для извлечения объекта из моих таблиц, атрибуты foriegn key возвращают null. Вот один из моих методов

     private LanTracerEntities2 entities = new LanTracerEntities2();

    public Employee FindEmployee(string empId)

    {
        var emp =  from employee in entities.Employees
               where employee.LogIn == empId
               select employee;

        return emp.FirstOrDefault();
    }
  

Таблица employee содержит следующие столбцы:
ID
EmpFName
EmpLName
Эмпирический
Телефон
войти
Электронная почта
LocID

LocID — это исходный ключ, связывающий его с таблицей местоположений. Когда я запускаю метод, он возвращает значение для каждого атрибута, кроме LocID. LocID равен null. В таблице есть данные. Это не единственный объект, который у меня есть, который возвращает null для атрибутов foriegn key. Как я могу получить метод, возвращающий значения FK?

Комментарии:

1. Ваш вопрос не имеет ничего общего с MVC. Это скорее проблема LINQ для сущностей.

Ответ №1:

Похоже, вы сравниваете с неправильным свойством? Учитывая имя вашего параметра, я думаю, вы могли бы захотеть сравнить с идентификатором сотрудника:

     var emp =  from employee in entities.Employees
           where employee.ID == empId
           select employee;
  

Сказав, что ваш первичный ключ должен быть числовым int / bigint — если это так, сделайте это вместо:

     int id = Convert.ToInt32(empId);
    var emp =  from employee in entities.Employees
           where employee.ID == id
           select employee;
  

Если вы хотите включить местоположение как часть результатов вашего запроса, вы можете специально запросить это:

 var emp =  from employee in entities.Employees.Include("Location") 
           ..
  

Это должно заполнить Location свойство в вашей записи employee при его извлечении.

Комментарии:

1. Спасибо, что я добавил. Оператор Include, и он, наконец, включает данные fk. Могу ли я использовать это для ввода нескольких FK? Если это так, отформатируйте это. Включить («FK1», «FK2»)

2. @user: Да — вы можете связать инструкции Include в цепочку, т. Е. entities.Employees.Include("foo").Include("bar") Я рекомендую вам ознакомиться с документацией по функциям на msdn.microsoft.com/en-us/library/bb896272.aspx