首页 新闻 搜索 专区 学院

怎么实现:Entity Framework实现inner join 但两表的连接列名不一样

0
悬赏园豆:50 [待解决问题]
Entity:
publicclass BlogPost
{
publicint ID { get; set; }
publicstring Title { get; set; }
publicstring Description { get; set; }
//拆分至单独数据库的文章内容字段
publicstring Body { get; set; }
}
 
DB:
表名:blog_Context
列:
ID:主键
Title:主题
Description:描述
 
表名:blog_PostBody
列:
BCID:blog_Context表的主键
Body:内容
 
 我想实现的SQL效果是:
 
SELECT bc.[ID], bc.Title,bc.[Description],bt.[Text] AS Body
FROM blog_Content bc
INNER JOIN blog_PostBody bt ON bc.ID = bt.BCID
WHERE bc.[ID]=@ID
 
求救。
 
 
 
 
 
 
问题补充:

其实就差一步啊,EF硬生生的不支持,日了.

家龙的主页 家龙 | 初学一级 | 园豆:152
提问于:2013-07-02 17:07
< >
分享
所有回答(3)
1
from c in blog_Context
join p in blog_PostBody on c.ID equals p.BCID
where c.ID == @ID
select new
{
  ....
}
geass.. | 园豆:1819 (小虾三级) | 2013-07-02 21:58

这也是种方法,但在我这边采用了领域驱动开发模式,这种解决方法应该不是最佳解决方案。看看是否有更佳解决方案。

支持(0) 反对(0) 家龙 | 园豆:152 (初学一级) | 2013-07-03 10:11

@家龙: ORM 的缺点是连表,视图是最佳的方法。

支持(0) 反对(0) geass.. | 园豆:1819 (小虾三级) | 2013-07-03 13:58
1
from t1 in blog_Context
from t2 in blog_PostBody
where t1.ID=t2.BCID &&t1.Id=id(这个id是参数)
select new {
     t1.ID,t1.Title,t1.Description,Body=t2.Text  
}
幻天芒 | 园豆:36790 (高人七级) | 2013-07-03 01:23

这也是种方法,但在我这边采用了领域驱动开发模式,这种解决方法应该不是最佳解决方案。看看是否有更佳解决方案。

支持(0) 反对(0) 家龙 | 园豆:152 (初学一级) | 2013-07-03 10:11

@家龙: 不管你是DDD还是TDD,和这个有啥关系呢?

支持(0) 反对(0) 幻天芒 | 园豆:36790 (高人七级) | 2013-07-03 12:46

@幻天芒: 你说的是一半是对的。我说这个不是最优方案的原因:

1、select new出来的对象就没法使用EF的.Set<TEntity>().Add(obj)。这个和ddd没关系。

2、ddd要求很多属性是只读的,所以没法保证所有的Entity都能直接new 出来,除非用反射,或其他不简洁的方式。

支持(0) 反对(0) 家龙 | 园豆:152 (初学一级) | 2013-07-03 21:14

@家龙: 好吧~!我EF用得不好,直接放弃使用了。现在公司项目用ibatis.net,其他的用Linq语法的Orm。暂时没想到什么跟简洁的方式,呵呵~

支持(0) 反对(0) 幻天芒 | 园豆:36790 (高人七级) | 2013-07-03 23:03
0

这是两个table存一个Entity,  叫做 Entity Splitting.

这篇文章专门讲这个  http://msdn.microsoft.com/en-us/data/jj715646.aspx

gunsmoke | 园豆:3592 (老鸟四级) | 2013-07-04 11:11

我看了,其中有个潜规则:两张表都是PersonId为主键。我要打破这个潜规则。

支持(0) 反对(0) 家龙 | 园豆:152 (初学一级) | 2013-07-04 20:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册