论坛首页 编程语言技术论坛

.net下的ORM用什么比较好,场景为CS架构的ERP

浏览 29153 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-06  
Before the March 2007 CTP of LINQ to SQL, we saw plenty of demos and code snippets using the “Including” operator. It looked like this:

var query = (from customer in MyDataContext.Customers select customer)
                .Including(customer => customer.Orders);

That was a nice, concise syntax to invoke eager loading selectively (i.e. on a per-query basis). It’s quite similar to NHibernate’s ICriteria.SetFetchMode(”Orders”, FetchMode.Eager) mechanism for controlling per-query loading strategies.

Unfortunately, LINQ to SQL’s “Including” syntax was killed in the March CTP. Random forum comments and blog posts imply it was removed because it was either too buggy or just didn’t fit with their general architecture. Unfortunately we’re now a bit stuck if we want eager-loading on a per-query basis.
0 请登录后投票
   发表时间:2008-11-06  
var results=
  from c in db.customers, o in db.orders
  where c.Id == o.CustomerId
  select new { c.Name, o.OrderId, o.ShippedDate } ;

var ProjectList = from P in DataContext.Projects
                  orderby P.Name
                  select new ProjectSummary {
                      ProjectId = P.ProjectId,
                      Name = P.Name,
                      Tasks = (
                          from T in P.Tasks
                          orderby T.Name
                          select new TaskSummary {
                              TaskId = T.TaskId,
                              Name = T.Name
                          }
                      ).ToList()
                  };


这样写也有同样效果。
0 请登录后投票
   发表时间:2008-11-06  
ray_linn 写道
var results=
  from c in db.customers, o in db.orders
  where c.Id == o.CustomerId
  select new { c.Name, o.OrderId, o.ShippedDate } ;

var ProjectList = from P in DataContext.Projects
                  orderby P.Name
                  select new ProjectSummary {
                      ProjectId = P.ProjectId,
                      Name = P.Name,
                      Tasks = (
                          from T in P.Tasks
                          orderby T.Name
                          select new TaskSummary {
                              TaskId = T.TaskId,
                              Name = T.Name
                          }
                      ).ToList()
                  };


这样写也有同样效果。


回家试试,如果真的解决了这个问题的话,估计可以用了。还有个问题就是没有2级缓存。而且我不清楚linq的查询是否强大……
0 请登录后投票
   发表时间:2008-11-06  
还有一个方法,就是利用LoadOtption的LoadWith方法,具体可以参考:

http://www.simonsegal.net/blog/2008/07/15/linq-to-sql-dynamic-querying-fetching-strategies-cont/


但得注意避免修改全局的loadOption,(加个attach和deattach方法?)
0 请登录后投票
   发表时间:2008-11-06  
ray_linn 写道
还有一个方法,就是利用LoadOtption的LoadWith方法,具体可以参考:

http://www.simonsegal.net/blog/2008/07/15/linq-to-sql-dynamic-querying-fetching-strategies-cont/


但得注意避免修改全局的loadOption,(加个attach和deattach方法?)

这个会更改全局的option,不能用
0 请登录后投票
   发表时间:2008-11-06  
ray_linn 写道
还有一个方法,就是利用LoadOtption的LoadWith方法,具体可以参考:

http://www.simonsegal.net/blog/2008/07/15/linq-to-sql-dynamic-querying-fetching-strategies-cont/


但得注意避免修改全局的loadOption,(加个attach和deattach方法?)


你说的那两个方法:

前者貌似Project是Entity,而ProjectSummary是POJO,等于要多些好多类。
后者那个,根本不行,难道每次request要重新连接?LoadOptions只能修改一次……
0 请登录后投票
   发表时间:2008-11-06  
PS:NHibernate不知道是否支持annotation……
0 请登录后投票
   发表时间:2008-11-07  
你问错了,应该说Nhibnerate支持不支持Attribute(annotation是attribute的抄袭版),答案是肯定的。


http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/mapping-attributes.html
0 请登录后投票
   发表时间:2008-11-07  
咋了,难道我火星了?最近怎么总火星?
我觉得 linq 这样的,还是先观望观望比较好。

但是大家为什么不提自带的 DataSet 呢?虽然那个东西有缺点,但是完全自动生成等等功能也很好呀!
0 请登录后投票
   发表时间:2008-11-07  
刑天战士 写道
前端是winform一类的,后段用WCF通讯,VS版本是2008。我看了一下linq to sql的文档,竟然不支持query级别的eager fetch,polymorphic也不支持,而且语法很古怪(用惯了RoR,觉得纯sql才好……)。这东西太新了,貌似还不太完善阿……nHibernate还停留在1.2呢,用nHibernate就意味着满屏幕的XML,非常烦,其他的选择貌似只有Castle那个基于nHibernate的ActiveRecord了……

.net上的ORM根本没有java那么强大,我接触过的一些.net程序员还停留在存储过程处理业务逻辑的时代……

还有,是否有必要使用Spring.net,感觉.net中IoC的用途不如J2EE大,好多工作全靠IDE撑着……



1.polymorphic是支持的
2.eager fetch也没有问题,但是用WCF的话你还是加一个DTO层吧,否则会死地很难看的
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics