Entity Framework - geschichtetes Design - Wo Connectionstring setzen?
-
21-08-2019 - |
Frage
Ich verwende eine geschichtete Architektur mit dem Entity Framework als meine Datalayer mit einem Bündel von Endlagern auf denen die Linq-To-Entities-Abfragen enthalten. Die Datenschicht ist ein Projekt, neben, dass ich eine Service-Schicht und die Schnittstelle, die eine Website ist.
Ich möchte meine Website unter Angabe der Connectionstring für meine Entitätsmodell verantwortlich sein. Wie mache ich das?
Ich verwende eine Singleton-Methode zu meiner Einheit Repository zu erhalten, die innerhalb des Datalayer befindet.
Danke
Lösung
Sie können die Verbindungszeichenfolge in der App.Config der DAL-Baugruppe in den Abschnitt der web.config connection erstellt kopieren.
können Sie halten die Verbindungszeichenfolge in dem Assembly-DLL, aber Sie sollten es mit der Website nicht bereitstellen.
Sie müssen die gesamte Verbindungszeichenfolge kopieren. Es soll wie folgt aussehen:
<add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
Es sollte enthalten alle Informationen, auf denen die Mapping-Dateien vorhanden sind.
Andere Tipps
In meinem Fall, obwohl ich L2S verwende statt L2E, aber die Empfehlung stehen soll. Ich habe eine verallgemeinern Config-Bibliothek, die aus einem XML-Datei-Feeds. Wenn ein Datenkontext erforderlich ist, hat jedes Datenobjekt ein Verfahren wie folgt aus. Zugegeben, könnte es leicht genug Templat werden, wenn Sie es vorziehen.
private static string _conStr = null;
private static CalendarsAndListsDataContext GetDataContext()
{
if (_conStr == null)
{
_conStr = ConfigurationLibrary.Config.Settings().GetConnectionString("liveConString");
}
return new CalendarsAndListsDataContext(_conStr);
}
Nun größte Nachteil ist, Verbindungszeichenfolge Änderungen erfordern einen Neustart der Anwendung, aber in meinem Fall, das ist kein Problem.