2

我有这样的代码使用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.

相同的代码在控制台应用程序中完全正常。任何想法,有什么问题?

4

3 回答 3

8

我怀疑对于您的 ASP.NET 应用程序,您也有对 的引用System.Data.Entity,并且您正在使用EntityFunctions定义的类System.Data.Entity

但是,Entity Framework 6 已经移除了对组件的依赖,System.Data.Entity并为此重新定义了所有必要的类EntityFramework

这意味着,在您的控制台应用程序的情况下,我猜测无论是设计(System.Data.Entity未引用)还是偶然(System.Data.Entity被引用但EntityFunctions类取自EntityFramework.dll),都会采用正确版本的EntityFunctions(from EntityFramework.dll)。

如果您使用的是任何版本的 Entity Framework 6,请确保您使用的EntityFunctions是可以在 中找到的类,EntityFramework.dll而不是在System.Data.Entity. Entity Framework 6中的源代码EntityFunctions.cs

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

于 2013-05-14T10:11:23.690 回答
1

您收到此错误的原因是通过设计 Linq to Entities 将所有表达式转换为服务器查询。所以它不知道如何翻译DiffDays成SQL。尝试省略此方法并重写表达式。


更新:

EntityFunctions是规范函数,因此您可以在 Linq to Entities 中使用它们。所以唯一合理的解释是在 EF Alhpa版本中。

于 2013-05-14T09:07:15.877 回答
0

通过将我的所有 EntityFunctions.TruncateTime 更改为 DbFunctions.TruncateTime 解决了这个问题,并且在检查了各种 using 语句并删除了所有引用 System.Data 的语句后,错误消失了。

于 2021-02-25T13:00:44.307 回答