【问题标题】:Entity Framework 6: getting the simple stuff to workEntity Framework 6:让简单的东西发挥作用
【发布时间】:2016-02-09 00:15:32
【问题描述】:

我有一个 C#.NET (4.5.2) 项目,我正在尝试使用 Entity Framework (6.0) 来管理我在数据库中的数据模型。毕竟,这就是 EF 的用途。

我按照这里的例子:https://msdn.microsoft.com/en-us/data/ef.aspx

但它们都适用于 EF 4.1,并且这些示例中的语法都不适用于我。我的结论是中间版本发生了一些变化,但我可能是错的;我以前从未使用过 EF,而且由于我基本上无法在其中工作,所以我认为这里的某个人可能能够指出对于有经验的人来说可能是一个明显的错误。

首先,我有一个 Context 类:

class DatabaseContext : DbContext
{
    public DbSet<Announcement> Announcements {get; set;}
}

我还有第二个类尝试使用该上下文从我的模型中获取数据。

public List<Announcement> AllAnnouncements {
    get{
        using (var db = new DatabaseContext())
        {
            var results = from a in db.Announcements select a;
            var records = results.ToList();
            return records;
        }
        return null;
    }
}

第一个问题: 第二个块中的db.Announcements 有VS 的红色波浪线错误线,悬停时显示Could not find an implementation of the query pattern for source type 'DbSet&lt;Announcement&gt;'. 'Select' not found.

这告诉我问题可能出在第一个块(我设置 Context 类的地方),但如果是这样,我不知道它可能是什么;我在文档/示例中使用了语法,所以如果文档不正确,我不确定什么是正确的。

第二个问题: 我发现的所有示例都完全忽略了排序的主题,但我希望这些记录以最近的第一顺序进行排序(所以从 SQL 的角度来看是“AnnouncmentDateTime desc”)。我注意到如果我想包含它,似乎有一个orderby 字符串在 LINQ 字符串中被识别,并且还有一个被识别的descending 关键字也出现了。但不清楚该放在哪里,如何标点它(如果有的话),以及如何让查询运行(如果 DbSet 完全可查询,第二点可能会自然解决,我不知道直到第一个问题得到解决)。

我知道这是一个基本问题,但是我能够找到的文档不起作用,并且这里的问题清楚地表明其他人已经方式过了这一点在他们自己的代码中,所以我一定做错了,这对以前使用过 EF 的人来说是显而易见的。

提前感谢您能给我的任何帮助。

【问题讨论】:

    标签: c# .net entity-framework linq entity-framework-6


    【解决方案1】:

    VS 会将return null 显示为无法访问的代码,因为在此之前您有一个 return 语句。所以只需删除 return null 部分。

    要对记录进行排序,您可以在 LINQ 语句中使用 orderby 关键字。

    var results = from a in db.Announcements orderby a.AnnouncementDate descending select a;
    

    【讨论】:

    • 谢谢,我立即注意到了这个错误并修复了它(我包含了我的 getter 的一个非常抄袭的版本)。但问题是 db.Announcements 似乎根本不可查询。感谢排序的语法示例,但是没有排序的选择也不起作用。
    • 实际上,它是可以访问的,因为 'using' 块可能不会做任何事情,所以 VS 并没有抱怨。
    • 是的,我在帖子中包含的那个(“找不到源类型“DbSet”的查询模式的实现。找不到“选择”。”)
    • 我复制并粘贴了您的代码,它对我来说是可编译的。当您注释掉您的属性时,您是否仍然收到错误消息?
    • 这是我遇到的几十个类似错误之一,这只是试图让任何查询都可编译的最小/最简单示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多