我首先使用代码EF5,我有一个对象,其集合定义为virtual(延迟加载).这会在调用时返回数据.但是我希望它能够满载.我已从virtual属性签名中删除但现在它总是返回null数据.EF甚至没有运行查询,任何人都可以帮忙吗?
编辑:我知道.include()我只是喜欢使用非虚拟属性方法.
对象
User([Key]Id在Resource对象上,是person类的Parent):
namespace Entities
{
[Table("Users")]
public class User : Person
{
[Required]
public ICollection<Role> Roles { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
角色:
namespace Entities
{
public class Role
{
[Key]
public string Id { get; set; }
public virtual ICollection<User> Users { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework 4.1代码的第一种方法.
我希望将eager加载作为我的dafault配置,并避免在每个提取查询中使用Include扩展方法.
我在MSDN中建议,在DbContext构造函数中更改简单的lazy属性:
public class EMarketContext : DbContext
{
public EMarketContext()
{
// Change the default lazy loading to eager loading
this.Configuration.LazyLoadingEnabled = false;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法不起作用.我必须使用Include方法在每个查询中执行预先加载.有什么想法吗?提前致谢.
我花了两天的时间来反对这个问题,我似乎无法破解它(问题是).相同的代码工作正常,直到我添加数据库关系,我已经读了很多关于延迟加载.
我有两个数据库表,它们之间有1:1的关系. PromoCode表跟踪代码,并有一个名为的PK列id. CustomerPromotable有一个PromoId链接到PromoCode表的列id.这两个表没有其他关系.我在SQL Server Management Studio中生成了所有这些,然后从数据库生成模型.
为了使问题稍微复杂一点,我在WCF数据服务中这样做,但我不认为这应该有所作为(它在添加数据库关系之前有效).启用日志记录后,我总是在日志文件中获得带有文本的异常:
Dispose后访问DataContext.
我的函数当前返回表中的所有条目:
using (MsSqlDataContext db = new MsSqlDataContext())
{
// This causes issues with lazy-loading
return db.PromoCodes.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多文章/页面/答案,他们都说要使用这种.Include()方法.但这对我不起作用:
return db.PromoCodes.Include(x => x.CustomerPromos).ToArray();
Run Code Online (Sandbox Code Playgroud)
我也尝试了"魔术字符串"版本:
return db.PromoCodes.Include("CustomerPromos").ToArray();
Run Code Online (Sandbox Code Playgroud)
我设法开始工作的唯一代码是:
PromoCode[] toReturn = db.PromoCodes.ToArray();
foreach (var p in toReturn)
p.CustomerPromos.Load();
return toReturn;
Run Code Online (Sandbox Code Playgroud)
我已经尝试.Where()为查询添加了一个条件,我已经尝试过了.Select(),我尝试.Include()过后移动.Where()(这个答案说要做到最后,但我认为这仅仅是由于嵌套查询).我已经读过有关.Include() 静默失败的场景,毕竟我不会更接近.
我错过了什么?语法问题?逻辑问题?一旦我将这个"简单"的案例工作,我还需要嵌套Includes(即如果CustomerPromo表有关系 …