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
请问怎么解决样的问题?
应该是一对一的单向关系
但是我用的是两张表的主键来对应的
dudu 那个示例里面,是在主表中加了一个外键,然后做关系,我是两张表的主键做的唯一对应
我是两张表的主键做的唯一对应?
@Yu: 按你上面A和B的描述
只要把A的主键作为 B 的外键就可以了
@Yu: 比如:两张表的主键都是 UID, 且 A表的UID 对应 B表中UID
@危笑:
modelBuilder.Entity<A>().HasOptional(u => u.B)
.WithRequired();
@Yu: 非常感谢! 这种方式可行了,可是还是有微小的缺点,就是在生成SQL的时候 两次Left out join ,
在查询的时候需要注意什么吗?
@危笑: context.A.Include("B")
@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 呢?
@危笑:
不会有两个 Left outer join吧,你是不是用EF5
@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又不一样了
@危笑: 那你用EF5试试
推荐看看
http://www.cnblogs.com/humble/p/3320804.html
这个。。 我现在用的是EF~
@危笑: EF
1.性能不是很好
2.多数据源、数据迁移问题
3.成本高(如果不是很熟悉很有研究,很多坑)
你这种关系是继承