相关疑难解决方法(0)

c#在多线程服务器中使用Entity Framework

在多线程服务器中使用实体框架的最佳实践是什么?我正在使用实体框架ObjectContext来管理我的所有数据库操作,现在我知道这个上下文不是线程安全的,所以现在当我需要使用它来执行一些数据库操作时,我用lock声明来包围它是安全的.这是我应该怎么做的?

c# database multithreading entity-framework objectcontext

41
推荐指数
3
解决办法
4万
查看次数

实体框架 - 即使使用ToList()也可以进行延迟加载

首先,我使用EF 6.0和Code First方法.我的context配置设置为启用"代理创建"和"延迟加载".

我的问题是:延迟加载是否与返回IEnumerable(而不是IQueryable)的方法的结果一起工作?

我认为下面的代码更具说明性:

public void Test()
{
    var company = GetCompanies().FirstOrDefault();

    if (company.Employees.Count() > 0)
    {
        //I got here without errors!
    }
}

public IEnumerable<Company> GetCompanies() 
{
    var company = context.Companies.ToList();
    //Note that I did not Include the Employee (child table)

    return company;              
}
Run Code Online (Sandbox Code Playgroud)

请注意评论,我说:"我来到这里没有错误!".这意味着即使在ToList()通话后延迟加载也能正常工作.我认为转换后IQueryableListIEnumerable在EF将失去做延迟加载的能力.

我已经注意到代理仍然启用了GetCompanies方法返回的实体(在debbug模式中,我可以看到丑陋的哈希,如:System.Data.Entity.DynamicProxies.Company_7035BEA374959AC1...).

即使在不同的DLL上调用它,延迟加载也可以工作.它是否正确?我的意思是,即使我的方法返回IEnumerable(而不是IQueryable),一个不同的DLL可以在我的数据库中进行后续调用吗?

任何澄清将不胜感激.

c# entity-framework

9
推荐指数
1
解决办法
3497
查看次数