我有使用EntityFramework Alpha3(从nuget)这样的代码:

class Member
{
    [Key]
    public int Key { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
    public string Sitename { get; set; }
    public DateTime? RegDate { get; set; }
}

class MembersContext : DbContext
{
    public MembersContext()
        : base("Name=ConnectionString")
    {
    }

    public DbSet<Member> Members { get; set; }
}

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {

        Database.SetInitializer<MembersContext>(null);
        const int memberKey = 1001;
        using (var db = new MembersContext())
        {
            var query = from m in db.Members
                        where
                            m.Key == memberKey
                            && EntityFunctions.DiffDays(m.RegDate, DateTime.Now) > 0
                        select m;


            var member = query.FirstOrDefault();
        }

        return View();
    }
}


我尝试在新的ASP.NET MVC项目(基于.net 4.5)中使用EntityFunctions-它总是失败,并显示以下错误:

LINQ to Entities does not recognize the method 'System.Nullable`1[System.Int32] DiffDays(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' method, and this method cannot be translated into a store expression.


相同的代码在控制台应用程序中完全可以正常工作。有什么想法,怎么了?

最佳答案

我怀疑在ASP.NET应用程序中,您还引用了System.Data.Entity,并且您正在使用EntityFunctions定义的System.Data.Entity类。

但是,实体框架6删除了对System.Data.Entity的依赖,并为此目的在EntityFramework程序集中重新定义了所有必需的类。

这意味着,对于您的控制台应用程序,我猜是由于设计(未引用System.Data.Entity)或偶然(已引用System.Data.EntityEntityFunctions类来自EntityFramework.dll)造成的,使用了正确版本的EntityFunctions(来自EntityFramework.dll)。

如果使用的是任何版本的Entity Framework 6,请确保使用的是EntityFunctions类,而不是EntityFramework.dll中的类。 Source code of System.Data.Entity in Entity Framework 6

实际上,如果您使用Entity Framework 6,我建议删除所有对EntityFunctions.cs的引用-以避免将来出现任何混乱和错误。

10-08 14:20