5

У меня есть таблицы баз данных, которые выглядят следующим образом:Entity Framework Cardinality Выпуск на 0 ... 1 Ассоциацию в

Schema Diagram

Task может быть сопоставлен с Module или не отображенные на всех (0. ..1). Сначала я использую базу данных Entity Framework, и когда я сгенерировал модель из базы данных, объект Task пришел с модулями в виде коллекции (0 или более). Поэтому я открыл свой EDMX и изменил свойство навигации «Модули» на «Задача» на 0 ... 1.

EDMX

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

Error 3003: Problem in mapping fragments starting at line 1241:Given the cardinality of Association End Member Task, it should be mapped to key columns of the table TaskModule. Either fix the mapping or change the multiplicity of this end.

Я не понимаю, что мне нужно сделать, чтобы исправить это. Я просмотрел детали ассоциации и не вижу проблемы. Я знаю, что, вероятно, мне не хватает чего-то глупого, но я полностью застрял. Свойства ассоциации:

TaskModule Association

Visual Studio 2010 SP1, Entity Framework 4.3.1.0, SQL Server 2008 R2.

ответ

5

Один из способов сделать это - переопределить первичный ключ для таблицы TaskModule. Вместо первичного ключа (TaskId, ModuleName) он должен быть просто (TaskId). Затем сделайте модель обновления из базы данных и измените любую из ассоциаций вручную, которая не была получена из этого обновления.

+0

Нет смысла иметь таблицу TaskModule. ModuleName должен быть обнуляемым внешним ключом в задаче –

+2

@ Рафаэль Althaus Мне кажется, что это философский ответ (т.е. нарушает третий NF, но спорен ли вы должны или нет). Можете ли вы указать мне материал, который поддерживает ваш POV? Взгляните на http://stackoverflow.com/questions/1723808/nullable-foreign-key-bad-practice – Dean

+0

Это отличный вопрос, который вы связали, Дин. Наверное, я в меньшинстве, может быть, я старая школа, но нейтральные внешние ключи действительно втирают меня в неправильный путь. Я изменил таблицу TaskModule, как вы предложили, и теперь все работает нормально. –

1

Ну ваша схема базы данных не является правильным с описанием вы даете:

TaskModule стол вовлекает многие-ко-многим, а не многие к oneOrZero.

В edmx таблицы отношений «многие ко многим» не отображаются, но они все еще существуют в базе данных.

Таким образом, вы должны исправить свою базу данных или быть довольны отношением, предложенным EF!