当您编写涉及两个表/实体的linq查询时,您是否必须在查询中定义联接,或者是否存在使用已定义关系的不同语法?
var q =
from c in categories
join p in products on c equals p.Category into ps
select new { Category = c, Products = ps };
否则,在EF模型中定义关系的意义是什么?
我已经禁用了延迟加载,但是当访问引用实体/实体的属性时,实体会自动从数据库中加载。为什么?不应该再去了吗?
My EF version="6.1.3"
下面的行加载部门数据,而我希望它不应该加载,因为我已经禁用了延迟加载,而且导航属性也是非虚拟的。
Student student = context.Student.select(x => x.Department).First();
类:
public class Student
{
public string Name { get; set;}
public string Age { get; set
我有两个具有一对多关系的模型类:
public class Employee
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EmployeeId { get; set; }
public String EmployeeName { get; set; }
public int DeptId { get; set; }
[ForeignKey("DeptId")]
public Department Department { get; set; }
我使用的是Entity Framework4.1,我正在尝试选择一个实体,同时还包括它的一个相关的实体集合。这是使用LINQ执行此操作的标准方法。(MacAddressPool与AllowedPartNumbers是一对多。)
var query =
from p in MacAddressPools.Include( "AllowedPartNumbers" )
where p.MacAddressPoolID == 2
select p;
var pool = query.FirstOrDefault();
Console.WriteLine(
我正在从Linq到-SQL迁移到实体框架(4.4),首先使用数据库和DbContext。我想知道以下行为是否正常:
using (var e = new AgendaEntities()) {
var store = e.Stores.First();
var office = e.Offices.Create();
office.Store = store; // Set association
Console.WriteLine(office.StoreID); // shows Guid.Empty, expected store.ID!
}
在L2S中,
我正在开发WCF服务,为多个移动客户端提供数据。数据模型是实体框架4.0。架构如下所示。
当我返回SysUser的对象时,结果还包含导航属性和EntityKey以及其他与EF相关的内容。是否有可能得到纯对象(只有数据库字段,没有关系等)。
感谢更新,异常发生了“只有在LINQ实体中支持无参数构造器和初始化器”。关于以下代码:
return (from u in DataSource.SysUsers
where u.UserID == UserID
select new Player(u)
我有以下课程:
public class Vehicle{
public Engine TurboV6 { get; set; }
public class Engine{
public Cylinder Core { get; set; }
public class Cylinder{
public double? Capacity { get; set; }
我在OnModelCreating方法中配置了如下所拥有的实体:
modelBuilder.Entity<Vehicle>()
.OwnsOne(
我在我的DbContext中有一组从IDbSet查询的实体。现在,我希望遍历每个实体并查询它们的子集,这些子集在实体中定义为ICollection。对子集合调用AsQueryable()并对其运行linq查询是正确的吗?如果是这样的话,我的查询是linq- to -objects,还是EF填充的集合对象实现了去往数据库的IQueryable?
感谢你对此的见解。
我在许多地方读到,应该(通常)在实体中使用外键id,因为它是数据库的详细信息,实际上,EF通过向相应的表中添加一个EntityName_Id列来很好地管理它。
public class Order
{
public decimal Total { get; set; }
public int? InvoiceId { get; set; }
public Invoice Invoice { get; set; }
}
public class Invoice
{
public ICollection<Order> Orders { get; set
假设我有一个实体,它的虚拟nagivation属性如下:
public class School
{
public long Id { get; set; }
public virtual ICollection<Students> Students { get; set; }
}
据我所知,EF6使用代理来启用Students的延迟加载,但执行以下LINQ查询:
var myStudent = this.Students.Single(x => x.Id == id);
var studentsCount = this.Students.Count();
在默认情况下使用延迟加载时,我知道您应该在实体框架实体上调用.Include(),以便在查询中引入您想要的关联实体,以减少在实体上调用LINQ方法时对db的调用次数。如果不这样做,则可能会对每一行重复数据库调用( N+1问题)。
如果我编写了一个规范的LINQ查询,并显式地定义了联接,那么有人能确认我们是否可以防止N+1吗?
from x in _context.tblOrder
join y in _context.tblCustomer equals y.id = x.customerId
select x
当我们在所有需要的实体中加载连接时,N+1是否可以爬行?
编辑
作为背景,有人问初
我刚刚从Linq2SQL切换到Entity Framework,我在EF中看到了一些奇怪的行为,我希望有人能帮助我。我试着用谷歌搜索,但我找不到其他有同样问题的人。我模拟了一个场景来解释这种情况。
如果我直接使用EF上下文,我就能够在select中执行select。例如,这段代码执行得非常好:
// this is an Entity Framework context that inherits from ObjectContext
var dc = new MyContext();
var companies1 = (from c in d
自从EF 4.1上线以来,我就一直在使用EF CodeFirst,那是一年多以前的事了,现在我觉得很适合使用它。我习惯于定制实体验证器,重写.SaveChanges()来修改它的一些行为,以及一些重要的概念,比如映射到非表db对象。但是EF的这一部分对我来说仍然是多云的:context.Configuration.LazyLoadingEnabled = false;。
我了解基本情况,一旦调用linq查询,它们就会被抛到数据库中,如果我没有显式地指定它( yadda yadda yadda ),依赖集合就不会被加载。我想了解的是:
在什么情况下我应该禁用延迟加载?为什么?
禁用它的实
如果我使用带有linq to sql实体框架来查询它,且我有一个对象Person,但我只需要该对象的两个属性,那么将加载内存中的什么,整个对象?
示例:
我得到了实体Person和属性: Name,Age,Address,Country,Language……
我只需要使用属性名称和年龄。所以我不需要加载地址,国家和其他属性...内存中将有什么,将向SQL询问哪种类型的查询?
如果我的Linq查询是:
public IQueryable<Person> FindAllPersons()
{
return from person in db.Persons
我的另一个实体框架(ADO.NET)问题。我使用EF1 (没有选择),并有一个MySQL数据库作为后端。
一个简单的问题,我真的找不到令人满意的答案:
我到底要做什么才能加载?也就是说,当我有一个实体并想枚举它的子实体时,假设我有一个实体"Group“,它有一个子实体"User",我想做"from n in g.Users where n.UserID =4 select n",我首先必须调用g.Users.Load();
这有点烦人,因为当我对未加载的集合进行查询时,我希望EF自动加载它-至少抛出一些异常,而不是简单地返回0结果?
我必须处理加载的另一
以下代码在LinqPad中运行良好:
(from u in AspNetUsers
let userOrders = (from uo in UserOrders where uo.UserId == new Guid(u.Id) select uo)
select u)
但是,当我试图从MVC应用程序执行完全相同的代码时,会出现以下错误:
var users = (from u in ctx.Users
let userOrders = (from uo in ctx.UserOrders where uo.UserId == new Guid(
为什么实体框架要执行查询,而我希望可以从EF缓存抓取对象?
使用这些简单的模型类:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Content { get; set; }
public