我正在使用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) 我正在尝试优化我的应用程序,并且我注意到一个查询被多次触发而没有任何明显的原因.
是一个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查看交易..
有什么想法可以使这个查询多次运行?
另一个问题!
任何人都知道为什么db.companies.Single(c => c.id == id)要求排名前2?像这样:
SELECT TOP(2)[Extent1].[id] AS [id],....
提前致谢!
埃德加.
更新!
第三个电话是我的错,我解决了.但是,我发现这个:
该应用程序是多语言的,所以我编写了一个实现Controller的类. …
我做了我的研究,但是我找不到任何我想做的具体例子.
我成功地将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)
我知道我正在写一个无意义的代码,但我的想法是能够做类似的事情.
有什么建议?