neu bei rails: richten sie db ein und führen sie dann rake db: create / migrate aus
<p>hi, ich lerne gerade rails und folge einem tutorial. die anweisungen lauteten, die migrationsdatei zu bearbeiten, nachdem ich die app erstellt habe, und dann rake db: migrate und dann rake db: create auszuführen.</p><p>ich habe die migrationsdatei folgendermaßen bearbeitet:</p><pre><code>class createusers &lt; activerecord::migration def change create\_table :users do |t| t.string :username t.string :email t.string :encrypted\_password t.string :salt t.timestamps end end end </code></pre><p>wenn ich dann 'rake db: migrate' ausgeführt habe, ist ein fehler aufgetreten</p><pre><code>mysql2::error: table 'users' already exists: create table `users` ... </code></pre><p>nachdem ich 'rake db: create' ausführen soll, bekomme ich das</p><pre><code>user\_auth\_development already exists user\_auth\_test already exists </code></pre>
<p>sie laufen <code>rake db:create</code> einmal und nur einmal, und sie führen es zuerst aus. dann führen sie <code>rake db:migrate</code> jedes mal, wenn sie eine migration hinzufügen/ändern. entweder haben sie diese migration bereits ausgeführt oder sie verweisen auf eine datenbank, die bereits vorhanden ist und eine tabelle mit dem namen <code>users</code> enthält. ich vermute, sie haben die migration bereits einmal durchgeführt. in diesem fall können sie wahrscheinlich loslegen. wenn sie die datenbank entpacken und von vorne beginnen möchten, tun sie <code>rake db:drop db:create db:migrate</code>.</p>
<p>es gibt optionen, die ihnen dabei helfen:</p><pre><code> --insert-ignore insert rows with insert ignore. --replace use replace into instead of insert into. -t, --no-create-info don't write table creation info. </code></pre><p>denken sie an dieses paradigma</p><ul> <li>mysqldump alles von db1 in dump1</li> <li>laden sie dump1 in db3</li> <li>mysqldump alles aus db2 mit --replace (oder --insert-ignore) und --no-create-info in dump2</li> <li>laden sie dump2 in db3</li> </ul> 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. 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. <p>sie können das meiste davon tun, indem sie eine login.sql verwenden. login.sql wird während der - überraschenden - anmeldung ausgeführt und aus ihrem sqlpath oder dem aktuellen verzeichnis geladen. für die beispiele, die sie gegeben haben, haben sie wirklich den schlimmsten fall gewählt.</p><p>problem ist der sqlterminator. was auch immer sie dort eingeben, der schrägstrich wird als kostenloser sql-minator beibehalten. daneben sucht sqlplus zuerst nach dem sqlterminator und führt dies vor dem scannen zum string-terminator durch. ein fehler, wenn sie mich fragen. der schrägstrich kann in einer zeichenfolge verwendet werden, solange er nicht allein in einer separaten zeile steht. sobald sqlplus das als sqlterminator angegebene zeichen findet, ignoriert es alles andere und hört auf zu lesen.</p><p>der schrägstrich kann behandelt werden, solange er nicht alleine in einer zeile steht.</p><p>login.sql enthält:</p><pre><code>prompt run login.sql show sqlterminator show sqlblanklines set sqlblanklines on set sqlterminator ';' show sqlterminator show sqlblanklines prompt ready login.sql set echo on </code></pre><p>leigh.sql enthält:</p><pre><code>insert into t1 values ('fail bc semicolon a;a / '); insert into t1 values ('fail bc solo / aa / '); insert into t1 values ('ok / not solo aa /a '); delete from t1 where a = 'c a/ '; </code></pre><p>führen sie das skript aus:</p><pre><code>sqlplus leigh/leigh@orcl @leigh sql*plus: release 10.2.0.4.0 - production on thu aug 9 22:36:20 2012 copyright (c) 1982, 2007, oracle. all rights reserved. connected to: oracle database 11g enterprise edition release 11.2.0.3.0 - 64bit production with the partitioning, real application clusters, automatic storage management, olap, data mining and real application testing options run login.sql sqlterminator ";" (hex 3b) sqlblanklines off sqlterminator ";" (hex 3b) sqlblanklines on ready login.sql sql&gt; insert into t1 values ('fail bc semicolon 2 a;a 3 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('fail bc solo / 2 3 4 aa 5 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('ok / not solo 2 3 4 aa 5 /a 6 '); 1 row created. sql&gt; sql&gt; delete from t1 where a = 'c 2 3 4 a/ 5 '; 0 rows deleted. </code></pre><p>sie müssen nicht mit start-/endblöcken herumspielen. der befehl sqlterminator innerhalb des befehls kann nicht verarbeitet werden, unabhängig davon, wo er sich in einer zeichenfolge befindet oder nicht. er kann keine zeilen mit schrägstrich allein in einer zeile in einer zeichenfolge verarbeiten.</p> Wenn eine Spalte in der Datenbank nullfähig ist, hat die Ergebnisklasse auch eine nullfähige Eigenschaft. 

 Wenn beispielsweise eine `Order` eine `Datetime` Spalte mit dem Namen `CreatedDate` , sieht die resultierende `Order` Klasse in etwa wie folgt aus: 


```
public partial class Order: EntityObject
{
  ...
  private DateTime? _createdDate;
  ...
}

```
  Wenn \_ `createdDate` keinen Wert hat, wenn Sie `ObjectContext.SaveChanges()` aufrufen, wird eine `System.DBNull` automatisch als Teil des Befehls insert oder update an die Datenbank gesendet. 

 Hoffe das hilft Alex Eine Route ist nur eine Funktion. Sie können also wie gewohnt Argumente übergeben:


```
<code>// Redirect to /hello/Bob
def helloBob = Action {
    Redirect(routes.Application.hello("Bob"))    
}
</code>
```
Dieser Ausschnitt stammt von<http://www.playframework.org/documentation/2.0/ScalaRouting> (unten) <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> Es lohnt sich, einen Blick auf diesen [`Blog Post`](http://lostechies.com/jimmybogard/2012/07/20/choosing-an-orm-strategy/) werfen, aber letztendlich werden die Kriterien von Ihnen festgelegt. Sie müssen entscheiden, ob 

* schnelle Entwicklung
* Performance
* Code-zuerst
* DB zuerst

 oder was auch immer Sie suchen und priorisieren Sie die Liste basierend auf, was noch wichtiger ist. Dann verwenden Sie diese Liste, um Ihre Forschung zusammenzustellen. Hallo,  
  
ohne weitere Details lässt sich der Fehler leider nicht prüfen.  
  
Bitte stellen Sie trotz Sperrmeldung sicher, dass Sie Ihre Zugangsdaten in SFIRM aktualisiert haben.   
  
Hier finden Sie die neuen Zugangsdaten zur Eingabe in Ihr Banking-Programm: [Neue HBCI Zugangsdaten.](https://meine.bw-bank.de/faqs/wie-lauten-die-neuen-hbci-zugangsdaten-fuer-meine-online-banking-software-zahlungsverkehrsprogramme)  
  
Sollte der Fehler trotz richtigen Kommunikationsdaten weiterhin auftreten, lassen Sie uns bitte weitere Details an [community@bw-bank.de](mailto:community@bw-bank.de) zukommen (Kontonummer, Screenshot, Fehlerprotokoll etc.).  
  
Beste Grüße  
Nicolas Wenn die Abfrage keine Ergebnisraster zurückgibt, sollten Sie Execute und nicht Query verwenden.