Связь «многие ко многим», edmx, Entity Framework, SQL Express DB

У меня есть вопрос относительно отношений «многие ко многим» в отношении структуры сущностей.

Итак, у меня есть существующая экспресс-база данных SQL, которую я расширил, включив в нее новую таблицу под названием «Страна». Поскольку я хочу иметь отношения «многие ко многим» между «Страной» и другой таблицей «Язык», я создал таблицу пересечений. Все идет нормально.

У меня есть проект VS с файлом edmx, который я обновил из новой базы данных. Диаграмма выглядит нормально, я вижу отношение многие ко многим между страной и языком. Я не вижу таблицы пересечения между страной и языком (но это функция согласно Google).

Я вручную заполнил таблицу стран и пересечений в SQL Server Management Studio.

Как я понял отношения «многие ко многим» в Entity Framework, я должен иметь возможность просто получить языки, связанные со страной, написав: country.Language . Вот конкретный код:

string code = "fi";

        using (var context = new FooEntities())
        {
            IQueryable<Country> countriesTest = context.Country;
            IQueryable<Country> countries = context.Country.Where(s => s.CountryCode == code);
            Country country = countries.First(); //this works, I get the correct Country
            EntityCollection<Language> languages = country.Language; //this does not work, collection is empty

Никакие языки не возвращаются .. Я дважды проверил, что ввел правильные значения в таблицу пересечений, я что-то упустил?


person sreddy    schedule 07.11.2011    source источник


Ответы (1)


Ленивая загрузка включена? (Откройте файл edmx и в окне свойств установите для параметра «Отложенная загрузка включена» значение true.

Или отредактируйте edmx с помощью редактора xml.

<edmx:ConceptualModels>
   <Schema Namespace="FooModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
        <EntityContainer Name="FooEntities" annotation:LazyLoadingEnabled="true">

Или включить его программно:

using (var context = new FooEntities())
{
    context.ContextOptions.LazyLoadingEnabled = true;
    IQueryable<Country> countriesTest = context.Country;

Или нетерпеливо загрузить язык:

context.Country.Include("Language")
person Fabiano    schedule 07.11.2011
comment
Хороший вопрос. Я не вижу Lazy Loading Enabled в окне свойств, у меня есть категория подключения и категория схемы. Должен ли я поставить context.ContextOptions.LazyLoadingEnabled = true; в Designer.cs-файле - если да, то где? - person sreddy; 07.11.2011
comment
В дополнение к категории схемы и соединения у меня есть генерация кода и генерация сценариев базы данных. См. обновленный ответ - person Fabiano; 07.11.2011