2011-02-15 49 views
0

在此之前,我想说明我已经完成了大量搜索,而不仅仅是在这里,也在谷歌上。但答案从来没有让我走向正确的方向,或者我只是不理解它。ASP.NET MVC 2 LINQ到SQL多对多关系

我被困在下面的问题:

我有三个表:

项目: PK ID(INT)
名(为nvarchar 50)


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


图片: PK ID(INT),
路径(为nvarchar(MAX))


我使用ASP.NET MVC 2.0设计我自己的投资组合,我使用LINQ到SQL获取/操作表格数据。

我真的很新,但我对C#有一个体面的理解,也许我缺乏知识是什么让我在这里。

无论如何,现在的问题是,我写的CMS需要能够将多个图像附加到一个或多个项目,并且每个项目可以包含多个图像。

项目L:M个图像

我已经不行了,使用查询检索与其对应的图像的项目,并尝试多东西都在这里,并在谷歌找到。

我正在考虑内部类,但我不知道从哪里开始。

我是否需要创建一个模拟交叉表的内部类?也许是一个完全新的继承等我很笨。特别是一整天都会让我大脑一片混乱。

我希望有人可以给我一个答案,而不必使用plinqo或NHibernate,因为这会导致我从头开始,我已经写了很多。

回答

0

看一看这里:

的最佳方式,但也许有点难以实施简单的项目:

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

+0

谢谢Bazz,我看了一眼,也许试图实现它之前,生病了仔细阅读了几次,确认发生了什么等不适尝试实现它时,我有时间。实习期间问我很多时间:P – 2011-02-17 06:57:00

+0

@ user617941我添加了另一个链接,它提供了一个更简单的解决方案,但是具有只读限制。也许这对你的情况已经足够了。 – Bazzz 2011-02-17 08:51:02

0

所有这一切是SQL相关的,这里没有其他的代码(不知道ASP)。

要检索指定项目的所有图像路径,可以使用此SQL查询。

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'

要插入每解决一个以上的图像,你可以这样做:

--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语句的最后部分的奇特的方式,但所有的这些应该工作。