0

我有几个关于 EF 4.0 的问题,希望有人能帮助我。

先介绍一点背景知识:我使用了来自 visualstudiogallery.com 的工具将我的数据库逆向工程为类。就类、对象映射等而言,一切似乎都很好……在我的 dbcontext 类中,它为每个表生成了一个属性,这很好。现在这部分代码保存在一个项目中,并由 MVC 4 应用程序调用。我最终会把它变成一个完整的服务层来处理关注点分离,但现在直接链接就可以了。

无论如何,回到我的 EF 问题:

  1. 当访问与表名匹配的 dbcontext 类中的属性时,我对 EF 在这里做了什么感到困惑?它实际上每次都返回所有行吗?如果确实如此,似乎很疯狂

  2. 我尝试在 dbcontext 类中创建一个函数而不是属性,我想在其中提供一个参数并只返回与参数匹配的行,但是当我添加一个类并尝试在其中进行“LINQ”调用时,我收到以下错误:

找不到源类型“System.Data.Entity.DbSet ....”的查询模式的实现。找不到“选择”。您是否缺少对“System.Core.dll”的引用或“System.Linq”的 using 指令?

任何想法为什么会发生这种情况?

  1. 我认为这更像是一个链接问题,但假设我们有一个用户表 (userid)、一个马表 (horseid) 和一个马与用户相关联的表 (horseid, userid)。

如果我创建了一个函数,假设 2 已解析,称为 GetMyHorses 并且我将 userId 作为参数传递,我如何使用 Linq 提供我通常通过存储过程中的简单连接查询获得的内容并返回与相关联的所有马用户通过参数提供。

谢谢。

4

1 回答 1

1

您的两个问题都与 LINQ 管道、IQueryable接口和延迟执行有关。您需要学习上述这些主题。

但要回答你的问题:

  1. Horses不,当您说时,实体框架不会全部加载(例如)

    var ctx = YourHorsesContext();

        // At this time, it simply builds a query that it will fire later.
        var horses = ctx.Horses;
    
        foreach(Horse horse in horses) // it fires a SQL query here
            Console.WriteLine(horse);  // if you don't foreach, it will never fire a SQL query
    
  2. 输入这个:

    使用 System.Linq;

在你的类文件的顶部。您的代码应该可以工作。

于 2012-12-05T11:05:14.450 回答