是否有替代方法可以在视图页面中获取路由值而不是像查询字符串那样读取它?
@Html.ActionLink("Language Resources", "Index", "LanguageResource",
new { languageCode = Request.QueryString["languageCode"] , "")
Run Code Online (Sandbox Code Playgroud) 我建立使用Asp.net MVC 4(C#)我自己的CMS,我想缓存某些数据库中的数据,喜欢:本土化,搜索类别(它的长尾巴,每个类别都有它自己的子和子子类)等..
一直查询数据库会有点过分,因为每个页面请求可能超过30-100个查询,但用户很少更新这些数据库
那么最好的方法(性能和便利性)是什么?
我知道如何使用的动作的OutputCache,但它不是我需要在这种情况下,它的高速缓存中的HTML,但我需要的是例如,我自己的助手@html.Localization("Newsletter.Tite")将采取语言的价值,或任何其他帮手与数据交互等
我认为(不太确定)我需要缓存我想要的数据,只有在第一次调用应用程序时,然后使用缓存位置,但我甚至没有任何经验.
这个问题不是关于 c# 一般的“使用”,而不是关于何时/为什么使用它等等。
问题是,DBContext 对象是否自己处理连接,因此我不需要使用using它来处理它,没有关于它的问题,所以不要将其标记为重复
using (DBContext db = new DBContext())
{
var Order = db.Order.First(r => r.OrderID == 6);
Order.Type = 6;
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
或者不使用
DBContext db = new DBContext();
var Order = db.Order.First(r => r.OrderID == 6);
Order.Type = 6;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
因为我在这个来源中看到using没有必要,最好不要使用它。
实体框架会为我处理连接吗?
我真的很困惑,我用"Apress pro Asp.net Mvc 4"这本书了解到,Mvc 4的最佳模式是依赖注入,(将数据库的模型数据等放在另一个项目中) (域)然后为这些接口创建接口和实现,然后使用Ninja将其连接到控制器.
并且所有与数据库的连接仅来自数据层解决方案,这是viewModel中Web解决方案中唯一的模型
控制器
public class ProductController : Controller
{
private IProductRepository repository;
public ProductController(IProductRepository productRepository)
{
this.repository = productRepository;
}
....
}
Run Code Online (Sandbox Code Playgroud)
和Ninject
ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
Run Code Online (Sandbox Code Playgroud)
另一方面,在我的上一份工作(网站管理员)中,公司使用了另一种模式用于mvc项目(我现在正在使用这种模式).
这些项目只使用One Solution并使用Static Classes来处理数据层
我不喜欢依赖注入,这太复杂了,'f12'你只看到了接口而不是Concrete类
一些问题:
例:
public class LanguageController : AdminController
{
public Db db = new Db();
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
//
// GET: /Admin/Language/
public ActionResult Index()
{
return View(db.Languages.ToList());
}
[HttpPost, …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc entity-framework dependency-injection asp.net-mvc-4
我在这里看到静态类和静态函数是坏的,因为它们占用了大量内存.
我将它用于许多需要与数据库等交互的东西.
静态本地化类的一部分示例,即GetResources
public static class SFLocalization
{
public static string GetResources(string key)
{
string CurrentLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.ToString();
if (MemoryCache.Default["Resources_" + key] == null)
{
string x
using (Db _db = new Db())
{
MemoryCache.Default["Resources_" + key] = _db.Languages.First(l => l.Key == key && l.LanguageCode == CurrentThread).Value;
}
}
return MemoryCache.Default["Resources_" + key];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中,控制器等..我写这个来获取翻译的值
@SFLocalization.GetResources("NewsletterBoxTitle")
Run Code Online (Sandbox Code Playgroud)
1.)那些情况下的静态课真的那么糟糕吗?
2.)替代方案是什么?也许依赖注入(ninject等..)?? (我在书中看到它Apress - Pro Asp.net Mvc 4