2009-10-21 9 views
1

comment dois-je charger la table "Setting" dans un asp.net mvc afin que je puisse l'utiliser comme un paramètre de référence pour l'ensemble de l'application.Quelle devrait être la meilleure façon de charger les paramètres de la base de données?

Y at-il de toute façon économiser la mémoire et l'utilisation pour faire ce problème? Si je comprends bien, si j'ai des paramètres dans la base de données, je vais devoir faire le programme charger la table dans une variable, puis appelez. Mais est-il possible de sauver une requête d'être perdu?

im en utilisant LINQ to SQL

Merci

+0

Vous devez enregistrer les paramètres quelque part, alors que les « déchets » as-tu peur? –

Répondre

1

Oui, si vous utilisez une couche ORM appropriée, comme NHibernate (par exemple avec courant), ce qui peut mettre en cache les appels (requêtes SQL) à la table des paramètres pour vous entièrement automatiquement. Et vous manipulez les tables sans aucun SQL, seulement comme des appels aux méthodes des classes. Cependant, il faut apprendre NHibernate, ce qui peut prendre un peu de temps pour s'y habituer.

Il n'est pas possible d'obtenir les données de la table Settings à partir de la base de données sans envoyer de requête à la base de données. Mais vous pouvez éviter l'utilisation fastidieuse de la mise en correspondance du résultat avec des objets en utilisant un ORM.

Si vous prenez à la fois NHibernate et FluentNHibernate, il ressemble à quelque chose comme ceci pour 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); 

D'autres ORM existent, NHibernate peut être un peu exagéré si cela est une seule fois situation et si vous ne l'avez jamais fait auparavant. Cependant, il dispose d'un cache automatique de niveau 1 et 2 pour éviter les allers-retours inutiles à la base de données. Il est actuellement (prétendument?) La solution ORM open source leader de l'industrie.

Mise à jour: ajouté exemple simple de code et des liens vers NH/Courant

Questions connexes