Entity Framework многие ко многим вопросам - PullRequest
0 голосов
/ 18 февраля 2009

У меня есть отношение ко многим ко многим, используя таблицу ссылок, которая содержит дополнительную информацию. 3 объекта, LHS, RHS, LHSRHS LHS 1 - * с LHSRHS RHS 1 - * с LHSRHS

Я использую конструктор для генерации EDMX на основе таблиц

У меня 2 вопроса 1) Если создать все 3 объекта (новые), связать их и попытаться сохранить, я получаю нарушение FK при попытке вставить его в таблицы LHSRHS перед вставкой в ​​таблицу RHS

2) Если я загружаю объект LHS из БД, то попробуйте создать объект RHS и связать его с объектом LHS, если получу нарушение FK. Если я загружаю объект RHS из БД, то пытаюсь создать объект LHS и связать его с объектом RHS, который у меня работает отлично.

КОД для этого:

        //WORKS
        eftestEntities es = new eftestEntities();
        RHS existing = es.RHS.First();

        LHS newObject = new LHS();
        newObject.ID = "LHs1";
        newObject.Name = "LHs1";
        LHSRHS link = new LHSRHS();

        link.Something = "some";

        link.LHS = newObject;

        existing.LHSRHS.Add(link);

        es.SaveChanges();

        ...........

        //DOES NOT WORK
        eftestEntities es = new eftestEntities();
        LHS existing = es.LHS.First();

        RHS newObject = new RHS();
        newObject.ID = "RHSNEW1";
        newObject.Name = "RHSNEW";
        LHSRHS link = new LHSRHS();

        link.Something = "some";

        link.RHS = newObject;

        existing.LHSRHS.Add(link);

        es.SaveChanges();

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 18 февраля 2009

Тот факт, что он пытался вставить ссылку перед сохранением прав, указывает на то, что одно из нескольких отношений не помечено как внешний ключ: он не должен был этого делать (если он правильно настроен).

Есть ли в вашей таблице ссылок какие-либо дополнительные данные? Если нет, вы можете фактически удалить эту таблицу из модели - просто свяжите две интересные таблицы (многие ко многим) и выберите таблицу ссылок в качестве механизма хранения приложения (вам нужно нажать на ссылку между двумя таблицами в конструкторе).

В качестве альтернативы, если в вашей таблице ссылок есть составной ключ: "lhsid, rhsid", то, я думаю, инструмент сделает все это за вас автоматически.

0 голосов
/ 18 февраля 2009

Я нашел в сети пример, который работал, сидя за строкой с Beyond Compare, переименовывая все мои переменные в соответствие с моей переменной, единственные различия, которые я нашел, упорядочивание по разделам, которые я настраиваю безрезультатно, и тот факт, что они используют int PK, где я использовал varchars, меняя ключи в ints, это работает. Это не очень помогает, учитывая, что моей БД 15 лет, и в каждой таблице есть varchar PK: (

0 голосов
/ 18 февраля 2009

Если в таблице ссылок есть что-то большее, чем составной ключ (т. Е. Если в таблице более 2 столбцов), EF не сделает умную вещь и не настроит свойства навигации должным образом. Если в качестве составного ключа настроено только 2 столбца, таблица ссылок «исчезнет» из сущностей, и вы получите свойство навигации, которое представляет другую сущность как совокупность связанных сущностей. Я слышал, что EF v2 будет поддерживать сценарий, в котором есть дополнительные метаданные, отмеченные вместе с составным ключом: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...