我应该如何将“设置”表加载到asp.net mvc中,以便我可以将它用作整个应用程序的参考设置。
无论如何都要保存内存和使用来解决这个问题吗?根据我的理解,如果我在数据库中有设置,我将不得不让程序将表加载到变量中,然后调用。但是,无论如何都要保存查询免于浪费?
即时使用linq to sql
由于
答案 0 :(得分:1)
是的,如果您使用正确的ORM层,例如NHibernate(例如使用Fluent),它可以完全自动地将调用(SQL查询)缓存到设置表中。并且你将处理没有任何SQL的表,只能调用类的方法。
但是,它需要学习NHibernate,这可能需要一点时间习惯。
如果不向数据库发出查询,则无法从数据库中获取Settings表的数据。但是,您可以通过使用ORM来防止将结果映射到对象的繁琐使用。
如果同时使用NHibernate和FluentNHibernate,对于MS SQL Server 2008,它看起来像这样:
// this depends on your implementation, I assume a Settings class with
// simple getters and setters that map directly to the table. Use
// Fluent to do the mapping (see link) automatically through AutoMappings
// example of using AutoMappings plus configuration of linking to DB:
ISessionFactory sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008
.ConnectionString(c =>
c.Server("123.12.21.321")
.Database("db_name")
.Username("db_user_with_access_to_db")
.Password("passwordhere")
)
)
.Mappings(m =>
m.AutoMappings.Add(AutoMap.AssemblyOf<Logo>()
.Where(t => t.Namespace == "YourNamespace.Entities"))
)
.BuildSessionFactory();
// example of a Settings class:
public class Settings
{
public int Id { get; private set; }
public int BackgroundColor { get; set }
// etc
}
// example of getting a session, retrieving data, changing/saving data
ISession session = sessionFactory.OpenSession(); // session for getting data from DB
Setting mySetting = session.Get<Setting>(someId);
mySetting.BackgroundColor = 0xAA44DD;
var transaction = session.BeginTransaction();
session.SaveOrUpdate(mySetting);
transaction.Commit();
// how it looks like if you use Generics and a little Dao class to wrap it all up:
Dao<Settings> daoSettings = new Dao<Settings>();
Settings someSettings = daoSettings.Get(someIdHere);
Settings userSettings = daoSettings.Get(new User("John"));
List<Settings> allSettings = daoSettings.GetAll();
int BackgroundColor = userSettings.BackgroundColor; // any of the columns here
userSettings.BackgroundColor = 0x45DA8E;
daoSettings.Save(userSettings);
存在其他ORM,如果这是一次性的情况,如果你以前从未这样做过,那么NHibernate可能有点矫枉过正。但是,它具有自动的level-1和level-2缓存,以防止对数据库进行任何不必要的往返。它目前(据称是?)是业界领先的开源ORM解决方案。
更新: 添加了简单的代码示例和指向NH / Fluent的链接