Ändern Sie Verbindungszeichenfolge in EF6 basierend auf Provider von Config




 Ich bin von EF5 zu EntityFramework 6 gewechselt. 

 Jetzt habe ich ein Problem, ich möchte die Verbindungszeichenfolge basierend auf dem Provider in app.Config ändern. Bedeutung Wenn es SqlServerCe ist, muss ich den DatabaseFile.sdf-Dateinamen ändern, um eine Datenbank zu ändern. Wenn es SqlServer ist, muss ich InitialCataloge ändern. 

 Ich habe das getan, indem ich die Art von 

 'Database.DefaultConnectionFactory', aber dies ist in EF6 veraltet. 

 Wie kann ich die Verbindungszeichenfolge basierend auf dem Provider ändern? 

 Ich kann dies nicht mit dem DbConfiguration Attribut tun, da ich die Verbindungszeichenfolge jedes Mal ändern muss.
Sie können verwenden 


```
DbConfiguration.SetConfiguration(new YourDbConfiguration());

```
  Sie können also Ihre Konfiguration verwenden, ohne ein Attribut zu verwenden. 

 Aber wenn ich benutze 


```
public CeDbConfiguration()
{
 SetDefaultConnectionFactory(new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName,
                                                        @"c:\test",
                                                        @"c:\test\db.sdf"));
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
                    SqlCeProviderServices.Instance);
}

```
  Um eine SQL CE Factory zu konfigurieren, wird der Pfad *'C: \ test'* ignoriert und ich muss auch Database.DefaultConnectionFactory setzen !!
Ich treffe dasselbe Problem in EF RC1. und ich habe eine Entdeckung, hoffe, dass es dir helfen kann. Ich erstelle ein Projekt, um das Entitätsmodell und EF DBContext einzubeziehen. dann Web-Projekt Referenz das Projekt. führe diese Befehle aus, funktioniert nicht: 

1. dnx ef migrations fügt MyFirstMigration hinzu
2. dnx ef Datenbank - Update [Ergebnisse](http://i.stack.imgur.com/Ftbey.png)

 Aber wenn ich die DBContext-Klasse in mein Web-Projekt verlagern, funktionieren die Modelle immer noch in einem anderen Projekt. [Neues Ergebnis](http://i.stack.imgur.com/JgMbG.png) 

 Stellen Sie in meinem Szenario sicher, dass DBContext im Webprojekt vorhanden ist. 1. Erstellen Sie eine neue ASP.NET-Webanwendung mit dem Namen "WebProject" mithilfe der Webanwendungsvorlage (Authentifizierung: Benutzerkonto).
2. Fügen Sie der Lösung mit dem Namen "DataAccess" ein weiteres Projekt hinzu (sagen wir Klassenbibliotheksart, obwohl diese nicht relevant ist)
3. Verschieben Sie jetzt den Ordner ApplicationDbContext / ApplicationUser files & migrations in das DataAccess-Projekt.
4. In diesem Stadium wird die Erstellung fehlschlagen, daher müssen wir die project.json für korrekte Referenzen korrigieren.
5. Fügen Sie für DataAccess-Projekt folgende Abhängigkeiten hinzu 


```
"dependencies": {
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
}

```
6. Fügen Sie für WebProject `DataAccess` als Abhängigkeit hinzu. Da `DataAccess` auf zwei Pakete verweist, können Sie diese Referenzen aus WebProject entfernen.   
 Build sollte nun erfolgreich sein und Sie können eine Webanwendung starten.

 So verwenden Sie ef-Migrationen: 

 Wechseln Sie in der Befehlszeile in das Verzeichnis von WebProject (und nicht das DataAccess-Projekt). Alle ef-Befehle funktionieren von hier aus gut. 

 Um neue Migrationen zum Migrationsordner des DataAccess-Projekts hinzuzufügen, müssen Sie die Option `-p` verwenden. Mögen,   
 `dnx ef migrations add Sample -p DataAccess` . 

 Das Problem tritt auf, weil die Befehle von cmd im DataAccess-Projekt ausgeführt werden. Ihre Startup-Klasse, die alle Dienste initialisiert, befindet sich in WebProject. Wenn Sie versuchen, Befehle aus dem DataAccess-Verzeichnis auszuführen, wird `dnx ef` erkannt, da auf `EntityFramework.Commands` verwiesen wird. Wenn Sie jedoch versuchen, die Migrationen zu verwenden, werden Dienste nicht initialisiert. Daher wird das Überschreiben der Ausnahme fehlschlagen. <p>hinweis: ab azure sql database v12 gelten diese einschränkungen nicht mehr.</p><p>das ist kein "primärindex". es gibt so etwas wie einen "primärschlüssel" und es gibt auch so etwas wie einen "clustered index". unterschiedliche konzepte, oft verwirrt. lassen sie uns angesichts dieser unterscheidung die frage noch einmal betrachten:</p><p>q1) kann der clustered-index in einer sql azure-tabelle geändert werden?<br> a: ja. verwenden sie <code>with (drop\_existing=on)</code>:</p><pre><code>create table friend ( userid int not null, id int not null); go create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>f2) kann der clustered-index einer tabelle mit einer primärschlüsseleinschränkung geändert werden?<br> a: ja, wie oben, solange die primärschlüsseleinschränkung nicht über den clustered-index erzwungen wird:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>f3) kann die primärschlüsseleinschränkung einer tabelle geändert werden?<br> a: ja, solange die primäre einschränkung nicht über den clustered-index erzwungen wird:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); go create clustered index cdxfriend on friend (userid, id); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key nonclustered (userid) go </code></pre><p>f4) kann der primärschlüssel einer tabelle geändert werden, wenn er über den clustered-index erzwungen wird?<br> a: ja, wenn die tabelle nie zeilen hatte:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key clustered (id, userid) go </code></pre><p>f5) kann der primärschlüssel einer tabelle geändert werden, wenn er über den clustered-index erzwungen wird, wenn die tabelle gefüllt ist?<br> a: nein. jede operation, die einen aufgefüllten clustered-index in einen heap konvertiert, wird in sql azure blockiert <em>, auch wenn die tabelle leer ist </em>:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); delete from friend; go alter table friend drop constraint pk\_friend; </code></pre><p>als randnotiz: die einschränkung kann geändert werden, wenn die tabelle <em> abgeschnitten ist </em>.</p><p>die problemumgehung zum ändern der pk-einschränkung einer aufgefüllten tabelle besteht darin, das gute alte <a href="http://msdn.microsoft.com/en-us/library/ms188351.aspx"><code>sp\_rename</code></a> trick:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); go create table friendnew ( userid int not null, id int not null identity(1,1), constraint pk\_friend\_new primary key clustered (id, userid)); go set identity\_insert friendnew on; insert into friendnew (userid, id) select userid, id from friend; set identity\_insert friendnew off; go begin transaction exec sp\_rename 'friend', 'friendold'; exec sp\_rename 'friendnew', 'friend'; commit; go sp\_help 'friend'; </code></pre><p>das <code>sp\_rename</code> ansatz hat einige probleme, vor allem, dass berechtigungen für die tabelle während des umbenennens nicht übertragen werden, sowie fremdschlüsseleinschränkungen.</p> <p>ein fremdschlüssel bezieht sich auf den primärschlüssel einer anderen tabelle. wenn der datensatz mit dem fremdwort eingegeben wird, muss der entsprechende datensatz mit diesem primärschlüssel vorhanden sein. daher müssen sie immer mit dem einfügen in die tabellen auf der 1-seite der beziehung (der master- oder eltern- oder primärschlüsseltabelle) beginnen. dann können nur sie einen datensatz auf der n-seite der beziehung eingeben (in die detail- oder kind- oder fremdschlüsseltabelle).</p><p>reihenfolge: 1. eintrag, 2. schlüsselwort, 3. schlüsselwortpriorität.</p><p>wenn eine tabelle mehrere fremdschlüssel enthält, müssen zuerst die zugehörigen datensätze in allen anderen tabellen mit den entsprechenden primärschlüsseln eingegeben werden. zum beispiel vor der eingabe eines datensatzes in <code>senserestricted...</code> müssen die entsprechenden datensätze in <code>sense</code> und in <code>reading</code> eingefügt worden sein.</p> Der Grund für das Problem war ein Fehler in der Effort-Datenbank. Wenn die berechnete Spalte auf nicht nullwertfähigen Spalten basiert, kann die berechnete Spalte auch automatisch nicht nullwertfähig werden. Daher erwartete die Effort-Datenbank einen Wert ungleich Null. Mit dem neuesten Update ist das Problem behoben. Sie müssen das globale `EntityFrameworkEffortManager.UseDefaultForNotNullable` Flag auf true setzen. 

 Siehe die [Ausgabe auf Github](https://github.com/zzzprojects/EntityFramework-Effort/issues/62#issuecomment-471199839) <p>die tastaturkombination, nach der sie suchen (<kbd>ctrl</kbd>+<kbd>k</kbd>, <kbd>ctrl</kbd>+<kbd>d</kbd>) dient der "formatierung" - aber nicht in dem maße, wie sie es zu erwarten scheinen. es ist kein prettifier, sondern dient nur zum einfügen korrekter abstände und tabulatoren wie in <code>tools &gt; options &gt; text editor &gt; transact-sql &gt; general/tabs</code>. wenn sie also einen teil des texts markieren und die tastaturkombination drücken, werden tabulatoren in 4 leerzeichen konvertiert ( wenn sie leerzeichen einfügen ausgewählt haben, wenden sie die von ihnen angegebene art des einrückens usw. an.</p><p>diese option soll den code nicht lesbarer machen. dies ist keine funktionalität, die management studio derzeit nativ bietet. es gibt zwar mehrere optionen von drittanbietern - einige befinden sich außerhalb von management studio, z.</p><ul> <li> <a href="http://extras.sqlservercentral.com/prettifier/prettifier.aspx">sql prettifier von simple-talk</a> </li> <li> <a href="http://poorsql.com/">schlechtes sql</a> (welches <a href="https://dba.stackexchange.com/a/45052/1186">thomas schlug vor</a> )</li> </ul><p>außerdem gibt es add-ins für verschiedene ebenen der formatierungsunterstützung im editor:</p><ul> <li> <a href="http://www.red-gate.com/products/sql-development/sql-prompt/features">sql-eingabeaufforderung von red-gate</a> </li> <li> <a href="http://ssmstoolspack.com/features?f=4">ssms tools pack</a> </li> <li> <a href="http://www.apexsql.com/sql\_tools\_refactor.aspx">apexsqls refactor</a> </li> <li> <a href="http://www.ssmsboost.com/features/ssms-add-in-format-sql-document">ssmsboost</a> </li> <li> <a href="http://www.devart.com/dbforge/sql/sqlcomplete/">dbforge sql complete</a> (welches <a href="https://dba.stackexchange.com/a/45063/1186">robert schlug vor</a> )</li> </ul><p>nun, der grund, warum sie die nachricht erhalten ...</p><blockquote> <p>die tastenkombination (strg + k, strg + d) ist an den befehl (format format) gebunden, der derzeit nicht verfügbar ist.</p> </blockquote><p>... liegt daran, dass ssms diese tastenkombination einem anderen kontext zugeordnet hat. die art und weise, wie sie <em> sollten</em> in der lage sein, dies zu "beheben" - auch hier würde es immer noch nicht das tun, was sie möchten, selbst wenn das "beheben" funktioniert - ist wie folgt:</p><ol> <li>gehe zu <code>tools &gt; options &gt; environment &gt; keyboard</code></li> <li>platzieren sie ihren cursor in das feld <code>press shortcut keys:</code></li> <li>schlagen <kbd>ctrl</kbd>+<kbd>k</kbd>, <kbd>ctrl</kbd>+<kbd>d</kbd></li> <li> <p>ändern sie das dropdown-menü <code>shortcut currently used by:</code> von <code>datawarehouse designer</code> in <code>text editor</code>.</p> <p><img src="https://i.stack.imgur.com/1g5oe.png" alt="enter image description here"></p> </li> <li> <p>drücke ok</p> </li> </ol><p>dies ist <em> angenommen</em>, um die tastaturkombination dem texteditor zuzuordnen, aber management studio setzt sie zurück, nachdem sie auf ok geklickt haben (sie erhalten weiterhin die fehlermeldung. ich denke, das problem ist das die dokumentation geht davon aus, dass diese funktionalität vorhanden ist, aber management studio weiß es besser und bietet sie einfach nicht an (und microsoft wird dies wahrscheinlich als fehler in der dokumentation abschreiben und korrigieren, anstatt als mangel im tool) hoffe in der zukunft, aber vorerst <a href="http://connect.microsoft.com/sql/feedback/viewfeedback.aspx?feedbackid=496617">dies ist ein bekanntes und weitgehend ignoriertes problem</a> . sie werden feststellen, dass die registerkarte <code>formatting</code> diese <a href="http://msdn.microsoft.com/en-us/library/ms174205(sql.110).aspx">die dokumentation bezieht sich auf</a> ist einfach nicht vorhanden (obwohl es für xml vorhanden ist, wo die tastaturkombination funktioniert). in der dokumentation sollte wahrscheinlich folgendes angegeben werden:</p><blockquote> <p>wendet die einrückungs- und leerzeichenformatierung für die sprache an, die im bereich <strong> formatierung </strong> der sprache im texteditor <strong> angegeben ist </strong> abschnitt des dialogfelds <strong> optionen </strong>. nur im texteditor verfügbar <strong> <em> und nur für bestimmte sprachen</em> </strong>.</p> </blockquote><p>eine andere möglichkeit, sich ein bild davon zu machen, welche art von formatierungsoptionen ssms nativ bietet, besteht darin, unter <code>tools &gt; customize &gt; commands &gt; edit &gt; add command... &gt; format</code> die liste der möglichen befehle dort anzuzeigen. nichts, was darauf hinweist, dass kenntnisse der tatsächlichen sprache vorhanden sind, sodass nicht bekannt ist, wo zeilenumbrüche eingefügt oder zusätzliche einrückungen hinzugefügt oder klammern usw. verwendet werden sollen.</p><p><img src="https://i.stack.imgur.com/zhrer.png" alt="enter image description here"></p><p>wenn sie eine sprachspezifische formatierung wünschen, um den vorhandenen t-sql-code besser lesbar zu machen, erhalten sie von ssms nicht viel, und sie müssen nach anderen optionen suchen.</p> <p>vermutlich meinst du die folgenden vier:</p><ol> <li><code>mozilla/5.0 (x11; linux x86\_64)</code></li> <li><code>applewebkit/537.36 (khtml, like gecko)</code></li> <li><code>chrome/51.0.2704.63</code></li> <li><code>safari/537.36</code></li> </ol><p>die meisten webbrowser verwenden einen user-agent-zeichenfolgenwert wie folgt:</p><pre><code>mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]. </code></pre><ul> <li> <p><code>mozilla</code> ist ein <a href="https://stackoverflow.com/questions/1114254/why-do-all-browsers-user-agents-start-with-mozilla">nebenprodukt von browserkriegen</a> .</p> </li> <li> <p><code>applewebkit/537.36</code> ist die von ihrem browser verwendete plattform.</p> </li> <li> <p><code>chrome/51.0.2704.63</code> ist dein browser</p> </li> <li> <p><code>safari/537.36</code> wurde aus historischen gründen hinzugefügt, wo safari anders behandelt wurde.</p> </li> </ul><p>vielleicht möchten sie auch <a href="https://www.nczonline.net/blog/2010/01/12/history-of-the-user-agent-string/">diesen verlauf</a> oder <a href="https://stackoverflow.com/questions/4024230/strange-user-agent-with-google-chrome">diesen so beitrag</a> lesen</p> Hallo [@Mondchalb](/t5/user/viewprofilepage/user-id/6819) und [@Bookworm66](/t5/user/viewprofilepage/user-id/986484) 


 


Die direkte Eingabe von Kanalnummern steht gemäss ThomasS auf der Roadmap.   
siehe auch => [Hier](/t5/My-Swisscom-Kundencenter/Senderliste-von-mir-definierte-Reihenfolge-einstellen/td-p/630118)Posting nur 6



 War mein Beitrag Hilfreich? Dann markiere ihn doch als gelöst. Das hilft die Community übersichtlich zu halten. <p>so erhalten sie die liste der spalten in der standardreihenfolge ohne die fehlerhafte spalte:</p><pre><code>select string\_agg(quote\_ident(attname), ', ' order by attnum) from pg\_attribute where attrelid = 'myschema.mytable'::regclass and not attisdropped -- no dropped (dead) columns and attnum &gt; 0 -- no system columns and attname &lt;&gt; 'bad\_column' -- case sensitive! </code></pre><p>oder einfach <code>where attrelid = 'mytable'::regclass</code>, wenn sie darauf vertrauen, dass der suchpfad <a href="https://stackoverflow.com/questions/9067335/how-does-the-search-path-influence-identifier-resolution-and-the-current-schema/9067777#9067777"></a> in das richtige schema aufgelöst wird.</p><p> <a href="http://www.postgresql.org/docs/current/interactive/functions-string.html#functions-string-other"><code>quote\_ident()</code></a> fügt bei bedarf doppelte anführungszeichen hinzu.</p><p>ich habe die gleiche frage <a href="http://www.postgresql.org/message-id/flat/1180483885.536572.84550@q69g2000hsb.googlegroups.com#1180483885.536572.84550@q69g2000hsb.googlegroups.com">2007 auf pgsql-general</a> gestellt. es war damals postgres 8.2. süße erinnerungen ...</p><p>verbunden:</p><ul> <li> <a href="https://stackoverflow.com/a/24089729/939860">so überprüfen sie, ob eine tabelle in einem bestimmten schema vorhanden ist</a> </li> </ul> <p>es ist eine einschränkung des dbms - soweit ich weiß in allen. und das nicht nur beim hinzufügen einer spalte, sondern auch beim neuanordnen von spalten. wenn wir eine <code>unique</code> -einschränkung für <code>(a1, a2)</code> haben, können wir keine <code>foreign key</code> hinzufügen, die <code>references (a2, a1)</code>, es sei denn, es gibt eine eindeutige einschränkung für diese <code>(a2, a1)</code> das ist im wesentlichen redundant.</p><p>es wäre nicht besonders schwierig, dies als feature hinzuzufügen:</p><blockquote> <p>wenn es eine <code>unique</code> -einschränkung für <code>(a)</code> gibt, ist auch jede <code>(a, b, c, ..., z)</code> oder <code>(b,c, ...a, ...z)</code> kombination garantiert <code>unique</code>.</p> </blockquote><p>oder die verallgemeinerung:</p><blockquote> <p>wenn für <code>(a1, a2, ..., an)</code> eine <code>unique</code> -einschränkung besteht, ist auch jede <code>(a1, a2, ..., an, b1, b2, ..., bm)</code> - kombination oder neuanordnung <code>unique</code> garantiert.</p> </blockquote><p>es scheint, dass es nicht gefragt wurde oder nicht als hoch genug eingestuft wurde, um implementiert zu werden.</p><p>sie können jederzeit - im jeweiligen kanal - eine anfrage für die zu implementierende funktion stellen. oder implementieren sie es sogar selbst, wenn das dbms open source ist, wie postgres.</p>