统计一下,现在有人在实际项目中应用Entity Framework吗?

lix511 2011-08-23 06:26:57
我目前正在学习EF,试着把一个用linq to sql的项目移植到EF,结果发现原来linq to sql中正常执行的语句,出现了很多问题。总结了一下,主要有下面几个问题。
1.LINQ to Entities 仅支持强制转换 Entity Data Model 基元类型。
2.LINQ to Entities 仅支持无参数构造函数和初始值设定项。
3.LINQ to Entities 不识别方法,因此该方法无法转换为存储表达式。

对于业务稍复杂的SQL,这三类问题感觉没有很好的解决方案啊,大家在实际项目中怎么处理这样的问题的?
...全文
445 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lix511 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q107770540 的回复:]

1 种方式是将数据加载到内存里 使用LINQ2Object来处理
还有就是 使用对象、集合初始化器 不使用构造函数
[/Quote]


高人,像我后面贴的例子里面,多次调用私有函数的情况,
在EF中不能识别这些函数,那么该怎么重构这个SQL?
lix511 2011-08-24
  • 打赏
  • 举报
回复
自己顶一下
lix511 2011-08-23
  • 打赏
  • 举报
回复
直接上个例子吧,大拿帮忙解决下吧。。

return from p in posts
where p.State != (byte)EntityState.Removed
orderby p.PublishedDate descending
select new Post
{
ID = p.PostID,
Creator = new User
{
DisplayName = p.oxite_User.DisplayName,
Email = p.oxite_User.Email,
HashedEmail = p.oxite_User.HashedEmail,
ID = p.oxite_User.UserID,
LanguageDefault = new Language
{
ID = p.oxite_User.oxite_Language.LanguageID,
DisplayName = p.oxite_User.oxite_Language.LanguageDisplayName,
Name = p.oxite_User.oxite_Language.LanguageName
},
Name = p.oxite_User.Username,
Status = p.oxite_User.Status,
},
Area = new Area
{
ID = p.oxite_Area.FirstOrDefault().AreaID,
Name = p.oxite_Area.FirstOrDefault().AreaName,
DisplayName = p.oxite_Area.FirstOrDefault().DisplayName,
Description = p.oxite_Area.FirstOrDefault().Description,
CommentingDisabled = p.oxite_Area.FirstOrDefault().CommentingDisabled,
Created = p.oxite_Area.FirstOrDefault().CreatedDate,
Modified = p.oxite_Area.FirstOrDefault().ModifiedDate
},
Body = p.Body,
BodyShort = p.BodyShort,
Comments = new LazyList<Comment>( //这里会报【仅支持无参数构造函数和初始值设定项】
getCommentsQuery(p.PostID)
)
,
Created = p.CreatedDate,
Modified = p.ModifiedDate,
Published = p.PublishedDate != SqlDateTime.MaxValue.Value ? p.PublishedDate : (DateTime?)null,
Slug = p.Slug,
State = (EntityState)p.State,//这里会报仅支持强制转换 Entity Data Model 基元类型
Tags = getTagsQuery(p.PostID).ToList(),//这里会报不识别方法,因此该方法无法转换为存储表达式
Title = p.Title,
Trackbacks = getTrackbacksQuery(p.PostID).ToList(),
CommentingDisabled = p.CommentingDisabled
};

这个SQL中调了好几个私有函数(getTagsQuery,getTrackbacksQuery等)。
老毕 2011-08-23
  • 打赏
  • 举报
回复
目前的一个项目,正在用EF实现,感觉很轻巧、方便
q107770540 2011-08-23
  • 打赏
  • 举报
回复
1 种方式是将数据加载到内存里 使用LINQ2Object来处理
还有就是 使用对象、集合初始化器 不使用构造函数

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧