Je suis dans un hoo-ha avec mon patron que je ne peux pas passer à l'utilisation de technologies plus récentes jusqu'à ce que j'ai des preuves de certains problèmes en suspens. L'une des principales préoccupations concerne la façon dont les dépôts traitent les connexions. L'un des frais généraux supposés les plus importants est la connexion et la déconnexion à la base de données. Si j'ai un référentiel où je fais ce qui suit:Regroupement Connexion Regroupement
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
avec la classe comme ceci:
public class ContractsControlRepository : DataContext, IContractsControlRepository
avec des fonctions telles que:
public IEnumerable<COContractCostCentre> ListContractCostCentres(int contractID)
{
string query = "SELECT C.ContractID, C.CCCode, MAC.CostCentre, C.Percentage FROM tblCC_Contract_CC C JOIN tblMA_CostCentre MAC ON MAC.CCCode = C.CCCode WHERE C.ContractID = {0}";
return this.ExecuteQuery<COContractCostCentre>(query, contractID);
}
Maintenant, si dans mon action du contrôleur appelé _contractsControlRepository.ListContractCostCentres(2)
suivi immédiatement d'un autre appel au référentiel, utilise-t-il la même connexion? Quand la connexion s'ouvre-t-elle dans le contrôleur? Quand est-il fermé?
Vive
EDIT
J'utilise LINQ écrit à la main comme suggéré par Steve Sanderson dans son ASP.NET MVC book.
EDIT EDIT
Pour clarifier les choses, j'utilise LINQ comme mon ORM, mais je suis en utilisant des requêtes SQL premières (comme le montre l'extrait ci-dessus) pour effectuer des requêtes. Par exemple, voici une action du contrôleur:
public ActionResult EditBusiness(string id)
{
Business business = _contractsControlRepository.FetchBusinessByID(id);
return View(business);
}
Je ne suis pas en train d'ouvrir/fermer des connexions.
est ici un plus grand, plus extrait complet de mon repo:
public class ContractsControlRepository : DataContext, IContractsControlRepository
{
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
public IEnumerable<COContractCostCentre> ListContractCostCentres(int contractID)
{
string query = "SELECT C.ContractID, C.CCCode, MAC.CostCentre, C.Percentage FROM tblCC_Contract_CC C JOIN tblMA_CostCentre MAC ON MAC.CCCode = C.CCCode WHERE C.ContractID = {0}";
return this.ExecuteQuery<COContractCostCentre>(query, contractID);
}
Alors ContractsControlRepository est instancié dans mon contrôleur et utilisé comme _contractsControlRepository.ListContractCostCentres (2). Les connexions ne sont pas ouvertes manuellement, DataContext s'occupe de cela pour moi.
Cela dépend de ce que vous utilisez pour générer le code du référentiel. Alors, quel logiciel ORM utilisez-vous? – blowdart
@ Kezzer- J'ai ce livre et tandis que Steve utilise des attributs sur son modèle LINQ to SQL (par opposition au glisser-déposer), je ne vois nulle part dans le livre où il utilise SQL inline. Dans le livre, les requêtes sont écrites en utilisant LINQ. – RichardOD
Je le sais, mais une exigence de notre système est de ne pas utiliser LINQ to SQL pour générer des requêtes SQL.Nous utilisons LINQ to SQL comme outil ORM et requêtes en ligne pour l'interrogation. Je dois le faire parce que mon patron me le dit. Je ne suis pas d'accord avec ça, je n'ai pas le choix jusqu'à ce que je puisse lui prouver que LINQ to SQL pour les requêtes n'est pas plus lent que les requêtes SQL directes. – Kezzer