首页 新闻 会员 周边 捐助

EF中的多对多关系问题

2
悬赏园豆:10 [已解决问题] 解决于 2012-05-31 15:06

有三个表:

TableA:

ID

TableB:

AID

CID

TableC:

ID

AID

他们的关系是:

TableA是分类表,TableC是数据表,C通过字段CID确定该数据所属的主分类。

TableB是一个多对多的关系表,定义A与C之间的多对多关系(C中的数据除了主要所属分类外,还可能归类为别的分类)。

当我把这些表拖拽到EF设计器后,发现表TableB被A与C之间的多对多关系取代了,这样A与C之间就有了1对多和多对多两重关系。

请问下,这个情状是否会影响到应用?我是通过T4生成代码的,计划走CodeFirst的路(现在还没弄)。

问题补充:
SELECT a.guid, a.title, a.link, a.pubDate, a.author, a.source, a.category, a.description
FROM  RSSNews a INNER JOIN
        RSSNewsCategoryRelative b ON 
        a.guid = b.guid INNER JOIN
        ProductCategory c ON 
        b.Category = c.Category
WHERE c.Category=@category and a.guid>@guid and mininews=0 and a.status=1
UNION
SELECT a.guid, a.title, a.link, a.pubDate, a.author, a.source, a.category, a.description
FROM  RSSNews a INNER JOIN
        RSSNewsCategoryRelative b ON 
        a.guid = b.guid INNER JOIN
        ProductCategory c ON 
        b.Category = c.Parent
WHERE c.Category=@category and a.guid>@guid and mininews=0 and a.status=1
UNION
SELECT a.guid, a.title, a.link, a.pubDate, a.author, a.source, a.category, a.description
FROM  RSSNews a LEFT JOIN
        RSSNewsCategoryRelative b ON 
        a.guid = b.guid
WHERE (b.Category='ALL' or a.Category='ALL') and a.guid>@guid and mininews=0 and a.status=1
ORDER BY a.pubDate desc

上面的SQL是我曾经的实现,现在要用EF的LINQ来实现,该怎么弄?

RSSNews就是TableC

RSSNewsCategoryRelative就是TableB

ProductCategory就是TableA

无之无的主页 无之无 | 大侠五级 | 园豆:5095
提问于:2012-05-30 09:38
< >
分享
最佳答案
1

CodeFirst的核心是Code First, 你现在是Database First的思路。

Enity Framework 是ORM,是“对象关系”与“数据库关系”之间的映射工具。

Code First 是先设计对象,在设计对象(实体类以及它们之间的关系)时忘掉数据库,设计好之后,然后用EF将之映射到数据库。

忘掉TableA, TableB, TableC, 根据你的domain,设计对象。

实体A与实体C就是多对多关系,用EF处理多对多关系是最轻松的。

收获园豆:10
dudu | 高人七级 |园豆:30757 | 2012-05-30 13:19

那我的那一段SQL语句换成LINQ后该怎么写?

无之无 | 园豆:5095 (大侠五级) | 2012-05-30 13:39

@笨笨蜗牛: 无法用EF生成同样的SQL语句,只能想办法得到想要的查询结果。前几天,我想用EF实现纯正的两个表的INNER JOIN查询都无法实现,最后只能改用ADO.NET。复杂查询不是EF的优势。

dudu | 园豆:30757 (高人七级) | 2012-05-30 13:51
其他回答(1)
1

给B表加一个主键之后,B表应该就能自动生成了

sinhbv | 园豆:2579 (老鸟四级) | 2012-05-30 11:18

关系表只两个字段,AID和CID,主键是这两个字段联合的。

支持(0) 反对(1) 无之无 | 园豆:5095 (大侠五级) | 2012-05-30 11:44

@笨笨蜗牛: 用联合主键的这种肯定B表不会有实体,你加一个id,作主键的话,应该是就可以了。

支持(0) 反对(0) sinhbv | 园豆:2579 (老鸟四级) | 2012-05-30 12:27

@笨笨蜗牛: 你这个RSSNewCategoryRelative里只有guid和Category两个字段?

支持(0) 反对(0) sinhbv | 园豆:2579 (老鸟四级) | 2012-05-30 12:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册