相关疑难解决方法(0)

实体框架初始化是缓慢的 - 我可以做些什么来更快地引导它?

我的EF 4.3.1模型有200多个表.最初的启动很糟糕,几分钟.DotTrace捕获的配置文件意味着在框架深处有一些可怕的算法/可伸缩性选择,这可以通过数百万次调用那些方法以及3600万个IEnumerable.Contains()调用来证明.这是一个片段,这是由在数据库上完成的第一个查询触发的(未来的查询不会这样做并且没问题).

在此输入图像描述

我可以对我的模型做些什么来减轻痛苦?我能以某种方式预先编译吗?更好的是,EF团队可以解决这些问题或开源框架,以便我可以吗?或者至少修正拼写Warapper?:)

编辑:一个特定的EF调用触发这个基本上是var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault();.此外,EF Migrations Seed()AddOrUpdate可以有效地生成相同的堆栈.更完整的堆栈跟踪,可能会提供更多的上下文,在这里:富勒堆栈跟踪

编辑:一些相关链接:

EDIT2:现在他们刚刚开源代码,看来这行:

//Filter the 1:1 foreign key associations to the ones relating the sets used in these cell wrappers.
oneToOneForeignKeyAssociationsForThisWrapper =
    oneToOneForeignKeyAssociationsForThisWrapper.Where(
        it => (it.AssociationEndMembers.All(endMember => entityTypes.Contains(endMember.GetEntityType()))));
Run Code Online (Sandbox Code Playgroud)

是需要一些工作的人.当它可能没有时,它正在使用O(n ^ 2)算法,但我还没有仔细观察.

编辑3:令人高兴的是,看起来EF6中的工作正在修复此代码:http://entityframework.codeplex.com/discussions/396130

c# performance entity-framework-4 entity-framework-4.3

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

关于实体框架上下文生命周期的问题

我对ASP.NET MVC应用程序中实体框架上下文的期望生命周期有一些疑问.是不是最好尽可能在最短的时间内保持上下文?

请考虑以下控制器操作:

public ActionResult Index()
{
    IEnumerable<MyTable> model;

    using (var context = new MyEntities())
    {
        model = context.MyTable;
    }

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将不起作用,因为在视图呈现页面时,实体框架上下文已超出范围.其他人如何构建上面的代码?

c# asp.net-mvc entity-framework idisposable using

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

实体框架6编译LINQ查询

我正在尝试通过缓存查询来提高Web应用程序的性能.

    public static Func<myEntity, List<HASHDuplicates>, IQueryable<FormResponse>> CompiledDuplicatedResponses =
    CompiledQuery.Compile<myEntity, List<HASHDuplicates>, IQueryable<FormResponse>>(
    (db, hashes) => from r in db.FormResponse
                    from h in db.IndexHASHes
                    from d in hashes
                    where r.id == h.FormResponseID && h.IndexHASHString == d.hash
                    select r);
Run Code Online (Sandbox Code Playgroud)

我收到的错误是在编译时:

类型'myEntity'不能在泛型类型或方法'System.Data.Entity.Core.Objects.CompiledQuery.Compile(System.Linq.Expressions.Expression>)'中用作类型参数'TArg0'.没有从'myEntity'到'System.Data.Entity.Core.Objects.ObjectContext'的隐式引用转换.

我正在使用EF6

c# linq caching entity-framework compiled-query

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

第一个实体框架6非查询的六秒预热时间

从我的集成测试:

// Act
Stopwatch w = new Stopwatch();
w.Start();
userService.Create(userDTO);
w.Stop();


public void Create(UserDTO userDTO)
{
    var user = userDTO.ToEntity();
    _context.Entry(user).State = EntityState.Added;
    _context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

6,2秒做"sql插入"是疯了.我已经看到应用程序用户在第一次打开他们使用全年的项目时抱怨.所以每天都要等6秒......

我认为EF6的预热时间有所改善?

我能做些什么来改善这种悲惨的行为吗?

entity-framework entity-framework-6

4
推荐指数
2
解决办法
3615
查看次数