首页 新闻 会员 周边

EF 两表做关系,且都是2个表的主键对应

0
悬赏园豆:15 [待解决问题]

EF 两表做关系, 且都是2个表的主键对应,

看了@dudu 的
http://www.cnblogs.com/dudu/archive/2012/01/05/entity_framework_one_to_one_shared_primary_key.html

他是实现了这种方式,但是我现在是

如A表,B表; A的一条记录,B中最多有一条记录与之对应即要不1条,要不就没有,这种关系怎么实现?

就是说是left join ,现在用dudu的方式是 inner JOIN 
请问怎么解决样的问题?

小成时光的主页 小成时光 | 初学一级 | 园豆:143
提问于:2013-09-26 20:52
< >
分享
所有回答(3)
0

应该是一对一的单向关系

Yu | 园豆:12980 (专家六级) | 2013-09-26 21:31

但是我用的是两张表的主键来对应的

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-26 21:35

dudu 那个示例里面,是在主表中加了一个外键,然后做关系,我是两张表的主键做的唯一对应

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-26 21:37

我是两张表的主键做的唯一对应?

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-26 22:01

@Yu: 按你上面A和B的描述

只要把A的主键作为 B 的外键就可以了

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-26 22:04

@Yu: 比如:两张表的主键都是 UID, 且 A表的UID 对应 B表中UID

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-27 09:23

@危笑: 

modelBuilder.Entity<A>().HasOptional(u => u.B)
.WithRequired();

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-27 11:11

@Yu: 非常感谢! 这种方式可行了,可是还是有微小的缺点,就是在生成SQL的时候 两次Left out join ,

在查询的时候需要注意什么吗?

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-27 11:27

@危笑: context.A.Include("B")

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-27 11:39

@Yu: 恩,查询我是用的导航属性,
例如:member.Entites.Include("XL_MIC");
然后我查看了一下生成的SQL是两次 Left outer join 

select 字段.. from member a
left outer join mic b on  a.mid=b.mid
left outer join mic c on  b.mid=c.mid

这样和 Left  join有区别吗? 如何解决这个为Left join 呢?

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-27 11:45

@危笑:

不会有两个 Left outer join吧,你是不是用EF5

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-27 12:34

@Yu: EF 4.3 

主表里面做了一个导航属性,

public virtual XL_MIC XL_MIC{get;set;}

然后加上了 

modelBuilder.Entity<A>().HasOptional(u => u.B)
.WithRequired();

查询的时候就这样用的。

member.Entites.Include("XL_MIC");

生成出的SQL就是 2 个 left outer join

加上查询条件后,生成的sQL又不一样了

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-27 13:02

@危笑: 那你用EF5试试

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-09-27 13:11
0

推荐看看

http://www.cnblogs.com/humble/p/3320804.html

迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-09-27 09:25

这个。。 我现在用的是EF~

支持(0) 反对(0) 小成时光 | 园豆:143 (初学一级) | 2013-09-27 09:30

@危笑: EF

1.性能不是很好

2.多数据源、数据迁移问题

3.成本高(如果不是很熟悉很有研究,很多坑)

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-09-27 09:44
0

你这种关系是继承

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2013-09-27 11:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册