ASP.NET MVC 2 linq to sql отношения многие ко многим - PullRequest
0 голосов
/ 15 февраля 2011

Прежде всего, я хотел бы заявить, что я провел большой поиск, не только здесь, но и в Google.Но ответы никогда не давали мне правильного направления, или я просто не понимал этого.

Я застрял в следующей проблеме:

У меня есть три таблицы:

Проекты: PK id (int)имя (nvarchar 50)


ProjectImages: FK ProjectId (int)FK ImageId (int)


Изображения: PK id (int),путь (nvarchar (MAX))


Я использую ASP.NET MVC 2.0 для разработки собственного портфолио и использую LinQ to SQL для извлечения / манипулирования данными таблицы.

IЯ новенький, но у меня есть приличное понимание C #, возможно, мое отсутствие знаний привело меня сюда.

В любом случае, проблема сейчас в том, что CMS, которую я пишу, должна иметь возможность прикреплять несколько изображений к одному или нескольким проектам, и каждый проект может содержать более одного изображения.

проекты M: M images

Мне уже не удается получить проект с соответствующими изображениями с помощью запроса, и я пробовал несколько вещей, найденных здесь и в Google.

Я думал о внутренних классах, но не уверен, с чего начать.

Нужно ли создавать внутренний класс, который моделирует таблицу пересечений?Возможно, совершенно новый, который наследует и т. Д. Я совершенно невежественен.Особенно после того, как сломал мой мозг об этом весь день.

Я надеюсь, что кто-то может дать мне ответ без необходимости использовать plinqo или NHibernate, потому что это заставит меня начать все сначала, и я уже написал много.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Все это связано с SQL, здесь нет другого кода (не знаю ASP).

Чтобы получить все пути к изображениям для указанного проекта, вы можете использовать этот запрос SQL.

<code>select i.path
from Projects p
join ProjectImages pi on pi.ProjectIt = p.id
join Images i on i.id = pi.ImageId
where p.name = 'project'</codE>

Чтобы вставить более одного изображения в решение, вы можете сделать это:

--insert the images:
insert into images (name) path ('/path/to/image')
insert into images (name) path ('/path/to/second/image')

--Get the IDs of these images:
select id from images where path in ('/path/to/image','/path/to/second/image')
--let's say this gives you ids 10 and 11

--Get the project name:
select id from projects where name = 'project'
--let's say your project id is 1

--Insert into the joining table, once for each image (change for values above)
insert into ProjectImages (ProjectId,ImageId) values (1,10)
insert into ProjectImages (ProjectId,ImageId) values (1,11)

Я не уверен в причудливом способе выполнения последней части с помощью одного оператора SQL, но все это должно работать.

0 голосов
/ 15 февраля 2011

Посмотрите здесь:

Лучший способ, но, возможно, его сложно реализовать для простых проектов:

http://blogs.msdn.com/b/mitsu/archive/2008/03/19/how-to-implement-a-many-to-many-relationship-using-linq-to-sql-part-ii-add-remove-support.aspx

Загружает более простое решение, которое, к сожалению, обеспечивает доступ только для чтения. Возможно, это соответствует вашему сценарию и поэтому является лучшим подходом:

http://www.iaingalloway.com/2015/06/many-to-many-relationships-in-linq-to-sql.html

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