从数据库加载设置的最佳方法是什么?

时间:2009-10-21 10:33:47

标签: asp.net-mvc linq-to-sql

我应该如何将“设置”表加载到asp.net mvc中,以便我可以将它用作整个应用程序的参考设置。

无论如何都要保存内存和使用来解决这个问题吗?根据我的理解,如果我在数据库中有设置,我将不得不让程序将表加载到变量中,然后调用。但是,无论如何都要保存查询免于浪费?

即时使用linq to sql

由于

1 个答案:

答案 0 :(得分:1)

是的,如果您使用正确的ORM层,例如NHibernate(例如使用Fluent),它可以完全自动地将调用(SQL查询)缓存到设置表中。并且你将处理没有任何SQL的表,只能调用类的方法。

但是,它需要学习NHibernate,这可能需要一点时间习惯。

如果不向数据库发出查询,则无法从数据库中获取Settings表的数据。但是,您可以通过使用ORM来防止将结果映射到对象的繁琐使用。

如果同时使用NHibernateFluentNHibernate,对于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的链接