小编epa*_*ulk的帖子

正确使用datacontext的"Using"语句

我正在使用Linq to Entities,最近,我发现有很多人建议将datacontext包装在一个using语句中,如下所示:

Using(DataContext db = new DataContext) {
    var xx = db.customers;
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的.但是,我不确定如何在我的模型中加入这种做法.例如:我有一个接口(让我们称之为客户),它由这样的存储库实现:

namespace Models
{
    public class rCustomer : iCustomer
    {

        readonly DataContext db = new DataContext();

        public customer getCustomer(Guid id)
        {
            return db.customers.SingleOrDefault(por => por.id == id);
        }

        public iQueryable<customer> getTopCustomers()
        {
            return db.customers.Take(10);
        }

        //*******************************************
        //more methods using db, including add, update, delete, etc.
        //*******************************************

    }
}
Run Code Online (Sandbox Code Playgroud)

然后,为了利用使用,我需要将方法更改为如下所示:

namespace Models
{
    public class rCustomer : iCustomer
    {
        public customer getCustomer(Guid id)
        {
            using(DataContext db = …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities entity-framework

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

Linq查询被多次触发,没有任何明显的原因

我正在尝试优化我的应用程序,并且我注意到一个查询被多次触发而没有任何明显的原因.

是一个MVC 3应用程序,剃刀和我正在使用Linq和EF.

我有一些带有几个属性的ViewModel类.其中一个属性是要查看的模型.

这是我的控制器(我省略了所有其他属性的初始化):

public ActionResult companyDetail(Guid id)
    {
        companyDetailsViewModel myModel = new companyDetailsViewModel();
        myModel.companyDetail = companiesRepository.getCompany(id);
        return View(myModel);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的getCompany方法:

public company getCompany(Guid id)
    {
        return db.companies.Single(c => c.id == id); 

    }
Run Code Online (Sandbox Code Playgroud)

视图太长而无法在此处粘贴,但这是一个简单的视图.这是一个例子:

<div id="companyName">
<h2>
     @Model.companyDetail.companyName
</h2>
</div>
<div id="companyInfoWapper">
     <div class="companyInfo">
    <h5>
    industry: @Model.companyDetail.industry<br />
    revenue:  @String.Format("{0:C}", Model.companyDetail.revenue)
        </h5>        
     </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我正在使用AnjLab SQL Profiler查看交易..

  • 当我调用视图时,查询它被调用3次.
  • 生成的SQL在所有3上完全相同.
  • 交易ID不同,持续时间也有所不同.
  • 其余几乎是一样的.

有什么想法可以使这个查询多次运行?

另一个问题!

任何人都知道为什么db.companies.Single(c => c.id == id)要求排名前2?像这样:

SELECT TOP(2)[Extent1].[id] AS [id],....

提前致谢!

埃德加.

更新!

第三个电话是我的错,我解决了.但是,我发现这个:

该应用程序是多语言的,所以我编写了一个实现Controller的类. …

linq entity-framework asp.net-mvc-3

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

存储库"生成器"的依赖注入

我做了我的研究,但是我找不到任何我想做的具体例子.

我成功地将Ninject实现到了我的MVC项目中.一切都很完美.但是,我想做最后一步.

到现在为止,我一直在这样工作(正常的DI模式):

public class myController : Controller
{  
    private iMyInterface myRepository;

    public myController(iMyInterface myRepository)
    {
        this.myRepository = myRepository;
    }        

    public ActionResult list(){
        return view(myRepository.getMyList())
    }        

    // rest o the code ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是; 有办法做这样的事情吗?(存储库"Generator")

public class myController : Controller
{  
    private iMyInterface myRepository = specialClass.GetMyRepository();

    public ActionResult list(){
        return view(myRepository.getMyList()) }

    // rest o the code ...    
}
Run Code Online (Sandbox Code Playgroud)

我知道我正在写一个无意义的代码,但我的想法是能够做类似的事情.

有什么建议?

asp.net-mvc dependency-injection ninject

0
推荐指数
1
解决办法
296
查看次数