Отношение многие ко многим, edmx, Entity Framework, SQL Express DB - PullRequest
1 голос
/ 07 ноября 2011

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

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

У меня есть проект 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

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

1 Ответ

1 голос
/ 07 ноября 2011

Включено ли LazyLoading?(Откройте файл 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")
...