Как я могу использовать linq-to-sql со ссылками? - PullRequest
1 голос
/ 27 июня 2019

Я использую Entity Framework 6 и извлек свою модель из базы данных.Я не установил опцию «включать столбцы внешних ключей».

Я могу добавить новые объекты в эту модель, чтобы установить ссылки на внешние ключи, я использую ссылку на другой объект, например:

client.Country = country;

При попытке запроса модели с использованием ссылок я сталкиваюсь с проблемой:

ctx.Client.Where(c => c.Country == country);

приводит к ошибке "Невозможно создать постоянное значение типа" тип страны ". Поддерживаются только примитивные типы".

Использование числового идентификатора внешнего ключа

ctx.Client.Where(c => c.id_Country == country.idCountry);

не может работать, поскольку я решил не включать столбцы внешнего ключа.


Я нашел уродливый обходной путь, загрузив все это в память и отфильтровав там, используя ссылку
List<Client> clients = ctx.Clients.ToList();
clients.Where(c => c.Country == country);

, но это не очень элегантно.

Есть идеи?Включать внешние ключи проще простого, конечно, но модель выглядит намного чище без.

Заранее спасибо!

1 Ответ

2 голосов
/ 27 июня 2019

Для этого вы можете использовать [reference property].[key property], например,

c => c.Country.id_Country == country.idCountry

EF достаточно умен, чтобы распознать его как средство доступа к свойству FK в запросах LINQ to Entities и преобразовать его в имя столбца FK.

Другими словами, в запросе L2E c.Country.id_Country совпадает со c.id_Country свойством FK, если оно существовало.

...