2017-09-13 1 views
3

Je suis en train d'obtenir une chaîne de connexion mis en place dans mon application .Net de base, mais je continue à obtenir l'erreur:Connexion net de base Chaîne Dapper visual studio 2017

System.NullReferenceException: « La référence d'objet non définie à une instance d'un objet. '

J'ai essayé d'ajouter ce qui suit à appsettings.json:

"ConnectionStrings": { 

"Analysis": "Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sa; Password=Password123;Provider=System.Data.SqlClient;Trusted_Connection=True;MultipleActiveResultSets=true;Pooling=false;" 
} 

J'ai aussi essayé d'utiliser web.config comme je le faisais avant .Net de base:

<connectionStrings> 
<add name="Analysis" providerName="System.Data.SqlClient" 
    connectionString="Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sm;Password=Password123;"/> 

Puis dans C# j'ai:

public List<DapperTest> ReadAll() 
    { 
     var data = new List<DapperTest>(); 
     using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Analysis"].ConnectionString)) 
     { 
      data = db.Query<DapperTest>("select * from testTable").ToList(); 
     } 

     return data; 
    } 

Les deux façons me donner l'exception de:

System.NullReferenceException: 'La référence d'objet non définie à une instance d'un objet.'

J'ai utilisé les ressources suivantes:

.Net CORE Dapper Connection String?

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Get connection string from App.config

Mais je manque quelque chose. J'ai seulement mis en place des chaînes de connexion une fois et ce n'était pas dans. Net Core donc cela pourrait être évident pour les autres.

+0

quelle ligne rencontrez-vous une erreur? Quel objet est 'NULL'? – Shyju

+0

. Le noyau .NET fait la configuration différemment. Avez-vous un 'appsettings.json'? La méthode recommandée est de charger les appsettings dans votre objet 'IConfigurationRoot' et d'injecter cela dans votre classe, et obtenir la chaîne de connexion à partir de là – Jonesopolis

+0

@Shyju Je reçois l'objet est null sur la ligne suivante dans le code C#:' using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings ["Analyse"]. ConnectionString)) ' – Joe

Répondre

3

Si vous utilisez appsettings.json, créez une simple classe POCO pour modéliser vos configurations de chaîne de connexion comme ceci:

public class ConnectionConfig 
{ 
     public string Analysis {get;set;} 
} 

Ajouter cette ligne méthode ConfigureServices dans Startup.cs

services.Configure<ConnectionConfig>(Configuration.GetSection("ConnectionStrings")); 

Classe de service de données

class YourClass{ 
    private string _connectionString; 

    YourClass(string connectionString){ 
     _connectionString = connectionString; 
    } 

    //Your implementation 
    public List<DapperTest> ReadAll() 
    { 
     var data = new List<DapperTest>(); 
     using (IDbConnection db = new SqlConnection(_connectionString) 
     { 
      data = db.Query<DapperTest>("select * from testTable").ToList(); 
     } 

     return data; 
    } 
} 

Injecter IOptions<ConnectionConfig> dans vous r constructeur du contrôleur.

class YourController : Controller{ 
    YourClass _testing; 

    YourController(IOptions<ConnectionConfig> connectionConfig){ 
     var connection = connectionConfig.Value; 
     string connectionString = connection.Analysis; 
     _testing = new YourClass(connectionString); 
    } 
    public IActionResult Index() { 
     var testingData = _testing.ReadAll(); 
     return View(); 
    } 
} 
+0

Ceci est une aide énorme.Une question de suivi simple cependant: comment est-ce que je passerais dans un argument maintenant en appelant ceci dans un contrôleur (spécifiquement quel type parce que je ne suis pas familier avec 'IOptions')? Par exemple, que devrais-je passer en argument ici: 'public IActionResult Index() { var testing = new VotreClasse(); var testingData = testing.ReadAll(); Retour vue(); } ' – Joe

+1

Vous pouvez également injecter des IOptions dans le constructeur de votre contrôleur et faire la même chose que pour YourClass – Yared

+0

Maintenant, j'ai ajouté l'implémentation du contrôleur d'IOptions – Yared