Lambda与查询表达式实体框架/外键关系

时间:2014-10-20 14:45:15

标签: c# entity-framework

简而言之:使用lambda表达式和使用查询表达式获取记录之间有什么区别吗?

在下面的示例中:

  1. 我获得了一份员工记录
  2. 修改了他的工资而没有保存
  3. 更改为上下文我使用包含Salary表获取相同记录
  4. 为什么在执行查询2与查询3时结果会有所不同?

    var empdId = Guid.Parse("C8475622-09A9-4284-80D4-AAXXK");
    //City for this employee was Washington in database
    var emp = ctx.Employee
        .FirstOrDefault(emp => emp.ID == empId);
    emp.City = "New York"; //Modified the entity
    
    //Lambda version
    //Fetched again including foreign key relation Salary
    var employeeCity = ctx.Employee.Include("Salary")
        .FirstOrDefault(emp => emp.ID == empdId).City;
    //New York
    
    var cityfetchedAgain = from e in ctx.Employee
                        join sal in ctx.Salary on e.ID equals sal.EmployeeId
                        where e.ID == empdId
                        select e.City;
    var city = cityfetchedAgain.FirstOrDefault(); 
    //Washington
    

    修改 我将重新说出我的问题:Include查询版本返回已更改的属性,即使更改未提交到数据库也是如此。但是LINQ Join不知道上下文中的更改(此处为City属性)。记录是从数据库中提取的。

      

    我在这些表之间配置了显式外键。我是不是该   总是喜欢包括?

0 个答案:

没有答案