ich stehe grade vor einer schweren Aufgabe und hoffe ihr könnt mir helfen. Ich habe eine ASP.Net MVC4 Anwendung erstellt und will die zum Kunden ausliefern. Nun brauche ich aber eine art Installation oder so... Das Programm auf den IIS Server zu bekommen ist ja nicht das Problem. Mein Problem ist:
1. Die Daten für die Datenbankverbindung müssen vom Nutzer eingegeben werden können 2. Mit den Infos muss die Datenbank mit ihren Tabellen auf dem Server erstellt werden
Prinzipiell soll es so aussehen, dass beim ersten Start der Nutzer aufgefordert wird die Verbindungsdaten einzugeben. Daraufhin sollen diese gespeichert und die Datenbank erstellt werden.
Ich hab gehört, dass man Programmtechnisch aus dem Entityframework ihrgendwie die Datenbank erstellen kann, dazu finde cih aber leider nichts...
Um anderen die Suche zu erleichtern, werde ich hier meine Lösung einmal Präsentieren:
Schritt 1:
Dim UserIP = Request.ServerVariables("REMOTE_ADDR") Dim ServerIP = Request.ServerVariables("LOCAL_ADDR") If UserIP = ServerIP Then ' ### Der Code ### ' End If
Damit der Code nur vom Server direkt ausgeführt werden kann.
Schritt 2:
Dim config = WebConfigurationManager.OpenWebConfiguration("~") Dim section = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
Dim DefaultConnection As String = "Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}" section.ConnectionStrings("DefaultConnection").ConnectionString = String.Format(DefaultConnection, model.Servername, model.Datenbankname, model.Nutzer, model.Passwort)
Dim MyEntitiesCon As String = "metadata=res://*/Models.DataModel.csdl|res://*/Models.DataModel.ssdl|res://*/Models.DataModel.msl;provider=System.Data.SqlClient;provider connection string=""data source={0};initial catalog={1};persist security info=True;user id={2};password={3};multipleactiveresultsets=True;App=EntityFramework""" section.ConnectionStrings("MyEntities").ConnectionString = String.Format(MyEntitiesCon, model.Servername, model.Datenbankname, model.Nutzer, model.Passwort)
config.Save()
Damit wird die neue Datenbankverbindung in die "web.config" gespeichert.
Schritt 3:
Dim db As New MyEntities If Not db.DatabaseExists Then db.CreateDatabase() ' ### Code für z.B. Account anlegen ### ' End If
Legt die Datenbank nach den Vorgaben des EF an. Dabei wird die in der "web.config" gespeicherte Verbindung genutzt.
Schritt 4:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables:=True) WebSecurity.CreateUserAndAccount(model.AdminName, model.AdminPasswort) Dim newRole As New webpages_Roles db.webpages_Roles.AddObject(newRole) db.UserProfiles.First.webpages_Roles.Add(newRole) db.SaveChanges()
Legt einen Adminaccount an.
Ich hoffe ich konnte dem einen oder anderen mit meiner Lösung helfen.