Отсутствие таблицы ссылок «многие ко многим» в EF 4.0 - ошибка или особенность? - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть комментарий и вопрос.Entity Framework 4.0 не показывает таблицу связывания в соотношении «многие ко многим» между двумя таблицами, как, например, в Northwind для «Order_Details», таблицы связи между заказами и продуктами, если используются только два столбца, оба первичных ключав таблице ссылок, как это часто бывает.Таким образом, в Northwind, если вы используете в качестве первичных ключей и OrderID, и ProductID в таблице связей Order_Details между заказами и продуктами, для отношения многие ко многим таблица связи не будет отображаться, если присутствуют только эти два столбца (первичные ключи)в Order_Details.

Следовательно, вы не можете вставить или создать в таблице связей многие-многие, потому что Entity Framework 4.0 не показывает таблицу связей Order_Details, а Intellisense не показывает эту таблицу связей многих-многихотношения.Как сделать вставку или обновление в таблице ссылок, если EF 4 не показывает скрытую таблицу ссылок?Аргументы типа «теперь надо думать в ООП» меня не впечатляют.SQL имеет определенную структуру, и ООП - это всего лишь интерфейс для него, поэтому мы можем использовать LINQ-to-entity, а не неуклюжие запросы SQL, IMO.

Уловка, позволяющая обойти эту ошибку, была предложена для Silverlight здесь,http://forums.silverlight.net/t/159414.aspx/1, и это работает для веб-сервисов и любого другого решения .NET: просто добавьте в таблицу ссылок фиктивный столбец любого типа.

Теперь удалите исходный файл .edmx иперестройте новый, сгенерировав его для фактической базы данных.

Затем intellisense показывает таблицу связывания, а затем вы можете вставить / создать и выполнить другие обычные операции.

Например, Intellisense в EF4.0 теперь покажет таблицу связывания Order_Details, и вы можете создавать или вставлять, такие как (частичный фрагмент, исключая try / catch и любые параметры отката):

           using (aDBEntity context = new aDBEntity())
               Order_Details newOrdDetails = new Order_Details();
        newOrdDetails.OrderID = //some number here
        newOrdDetails.ProductID = //some number here

               context.AddToOrder_Details(newOrdDetails);
               context.SaveChanges();

Вопрос: это отсутствие показа множестватаблица ссылок ко многим - ошибка или особенность EF 4.0?

1 Ответ

3 голосов
/ 12 ноября 2011

Лично я думаю, что таблица связывания не нужна, если у вас нет дополнительного столбца, кроме двух ключей.Мне никогда не требовался доступ к таблице ссылок, которая просто используется для определения отношений M2M.Я чувствую себя расслабленным, добавив соотношение между Foo и Bar, получив сначала Foo (или Bar) и использую Foo.Bars.Add(sampleBar).

Думаю, вы ответили на свой вопрос.Если вы думаете, ООП, это особенность.Если вы хотите иметь доступ к таблице ссылок (и думаете, что делаете это правильно), это недостаток возможностей.

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