积极答复者
vs2012 中 生成的EF中不能使用原来的查询,怎么办?

问题
-
原来RC版本VS2012中生成的实体模型,现在用RTM的,重新生成后,好像用的版本不一样了,原来的代码:
using (YizeERPEntities content = new YizeERPEntities())
{
content.TArticles.Where("it.ID=1").OrderBy("it.CreateDate desc")).ToList();
}
现在要怎么办,有很多这样的查询,是有新的清洁支持,还是要用原来的EF版本,如果用原来的EF版本,怎么在 VS2012中设置?谢谢!
PS:EF4.1下运行正常,EF4.4后就不行了(在VS2012RTM中,打开后,删除原来的model, 重新生成一下,就成EF4.4了,有没有办法,用原来的4.1?)- 已编辑 seeseason 2013年1月7日 6:09 补充信息
答案
全部回复
-
Dynamic LINQ工具包(注意,建议用3.5版本,请创建项目的时候调整)。
此处下载dll或者示例代码:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
-
-
确定没有引用到其它的第三方类库
#region 程序集 System.Data.Entity.dll, v4.0.0.0 // H:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll #endregion
// // 摘要: // 按指定条件对查询结果进行排序。 // // 参数: // keys: // 作为结果排序依据的键列。 // // parameters: // 此方法中使用的零个或多个参数。 // // 返回结果: // 一个新的 System.Data.Objects.ObjectQuery<T> 实例,等效于应用了 ORDER BY 的原始实例。 // // 异常: // System.ArgumentNullException: // keys 或 parameters 参数为 null。 // // System.ArgumentException: // key 是空字符串。 public ObjectQuery<T> OrderBy(string keys, params ObjectParameter[] parameters);
-
哦,谢谢告知。
删除原来的System.Data.Entity.dll,重新引用并且增加using部分,重新编译看看。
-
System.Data.Entity.dll 版本没问题,现在是添加新的-〉添加新建项-数据-ADO.NET 数据模型 然后生成的就和原来的完全不一样了,原来是
public partial class YizeERPEntities :ObjectContext
现在继承DbContext
,应该是版本高了,好像这里应该有个选择版本的,我这不知道怎么没有EF的确有此语法,但是是针对 ObjectSet<T> 类型的,.net 4.5 也支持:
http://msdn.microsoft.com/zh-cn/library/vstudio/bb338811.aspx
Db-First的话,是使用 ObjectContext 为基类。我不知道 VS2012 是否修改了,你可以通过在 VS 中新建一个 EF 的项目,并通过数据库来生成模型来推断。
DbContext 是适用于Code-First的。
- 已编辑 Skyseer 2013年1月7日 7:24
-
楼主,可以尝试在一开始用VS2012打开项目时候弹出的框框中不要升级,直接用3.5原来版本打开。
或者修改属性强制修改成3.5的版本,然后修改局部代码看看。