Entity Framework получить внешний ключ - PullRequest
1 голос
/ 27 декабря 2011

У меня есть отношение 1: n к таблицам в базе данных: Employee (1): Role (n) Role имеет foreignKey с именем idEmployee

Я хочу создать оператор linq, который получит все ролиданный клиент.Я хочу сделать что-то вроде этого:

var myQuery = from r in Role 
              where r.idEmployee == someId
              select r;

Но у r нет свойства idEmployee!Как я могу получить значение внешнего ключа?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Если вы используете EF 4.0 (.NET 4.0) и модель программирования, основанную на базе данных, с моделью EDMX (визуальный конструктор), то вам необходимо убедиться, что опция Include foreign key columns in the model отмечена при добавлении таблиц к вашей модели EDMX:

enter image description here

Если вы не отметили эту опцию, то EF 4.0 будет вести себя так же, как EF 1.0 / 3.5 (в .NET 3.5), который должен включать свойство навигации - но не внешний ключ столбец как отдельный столбец.

1 голос
/ 28 декабря 2011

Если вы используете EF4.0 по крайней мере, это даст вам то, что вам нужно: Внешние ключи в Entity Framework

Если вы используете EF1.0, ваша проблемаболее серьезный, поскольку он не показывает внешние ключи в модели.Вам нужно перебрать коллекцию EntityKey.EntityKeyValues в поисках правильного значения.Но я думаю, что это только даст вам значение внешнего ключа и не будет работать в запросе (поскольку EF не знает, как перевести его в запрос SQL).

Но поскольку у вас есть внешние ключи, почему бы невы просто используете NavigationProperty, чтобы перейти к Employee сущности и проверить там значение?

var myQuery = from r in Role 
              where r.Employee.idEmployee == someId
              select r;
0 голосов
/ 27 декабря 2011

Используйте метод include в классе Employee, чтобы вернуть все связанные роли:

var myQuery = from e in Employees.Include(emp => emp.Roles)
              where e.EmployeeId == someId
              select e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...