关于.NET Entity Framework 4的一般问题

时间:2012-10-08 01:53:01

标签: linq linq-to-sql entity-framework-4 asp.net-mvc-4

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

首先介绍一下背景:我使用visualstudiogallery.com的工具将我的数据库逆向工程化为类。对于类,对象映射等,所有看起来都很好......在我的dbcontext类中,它为每个表生成了一个属性,这很好。现在,这部分代码保存在一个项目中,并由MVC 4应用程序调用。我最终会把它变成一个完整的服务层来处理关注点的分离,但是现在直接链接就可以解决问题了。

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

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

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

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

    为什么会发生这种情况?

    1. 我认为这更像是一个链接问题,但我们假设我们有一个用户表(userid),一个马表(horseid),然后是一个表,其中马与用户相关联(horseid,userid)。
    2. 如果我创建了一个函数,假设2被解析,称为GetMyHorses并且我将userId作为参数传递,我如何使用Linq提供我通常通过存储过程中的简单连接查询获得的内容并返回所有通过参数提供与用户相关联的马匹。

      感谢。

1 个答案:

答案 0 :(得分: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;

  3. 位于类文件的顶部。你的代码应该有用。