相关疑难解决方法(0)

实体框架渴望加载不返回数据,延迟加载

我首先使用代码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)

c# entity-framework lazy-loading poco

16
推荐指数
1
解决办法
2万
查看次数

实体框架4.1默认急切加载

我正在使用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方法在每个查询中执行预先加载.有什么想法吗?提前致谢.

entity-framework eager-loading entity-framework-4.1

13
推荐指数
1
解决办法
8011
查看次数

使用包含()的LINQ to SQL进行预加载

我花了两天的时间来反对这个问题,我似乎无法破解它(问题是).相同的代码工作正常,直到我添加数据库关系,我已经读了很多关于延迟加载.

我有两个数据库表,它们之间有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表有关系 …

c# linq lazy-loading eager-loading

5
推荐指数
1
解决办法
4983
查看次数