11

Ich benutze ASP.NET MVC 4 - C#, um eine Verbindung zu einer Live-Datenbank, und listet die Ergebnisse, aber wenn ich gehe, um die anzuzeigen Seite es gibt die folgende Fehlermeldung:Listing Tabelle Ergebnisse "CREATE TABLE-Berechtigung verweigert in der Datenbank" ASP.NET - MVC4

CREATE TABLE permission denied in database 'DatabaseName'. 

Description: An unhandled exception occurred during the execution 
of the current web request. Please review the stack trace for more 
information about the error and where it 
originated in the code. 



Exception Details: System.Data.SqlClient.SqlException: CREATE TABLE 
permission denied in database 'DatabaseName'. 

Source Error: 


Line 16:   public ActionResult Index() 
Line 17:   { 
Line 18:    return View(db.AccControls.ToList()); 
Line 19:   } 
Line 20 

Controller:

namespace TestDBCon.Controllers 
{ 
    public class HomeController : Controller 
    { 
     private DataDbContext db = new DataDbContext(); 

     public ActionResult Index() 
     { 
      return View(db.AccControls.ToList()); 
     } 

    } 
} 

AccControl.cs (Modell)

namespace TestDBCon.Models 
{ 
    public class AccControl 
    { 
     public int ID { get; set; } 
     public int ControlCode { get; set; } 
     public string Nominal { get; set; } 
     public string CostCentre { get; set; } 
     public string Department { get; set; } 
    } 

    public class DataDbContext : DbContext 
    { 
     public DbSet<AccControl> AccControls { get; set; } 
    } 
} 

Web.Config :

<add name="DataDbContext" connectionString="Data Source=***;initial catalog=***;integrated security=True;" providerName="System.Data.SqlClient" /> 

Ich versuche nicht, eine Tabelle zu erstellen? Ich versuche nur Ergebnisse zu verzeichnen, deshalb bin ich extrem verwirrt. Es muss etwas mit der MVC zu tun haben?

Jede Hilfe würde sehr geschätzt werden!

Dank

+0

Ist Ihre Webkonfiguration auf die richtige Datenbank ?, Können Sie uns die Deklaration und Initialisierung von db zeigen? – CR41G14

+0

können Sie sicherstellen, dass der von Ihnen verwendete Benutzer über die Berechtigungen zum Erstellen der Datenbank verfügt. – MMK

+0

@MMK Ich kann die Berechtigungen nicht persönlich ändern –

Antwort

2

Ist Ihr web config auf die richtige Datenbank verweisen?

Sind die Anmeldedaten korrekt?

Entity Framework erstellt Tabellen in der Datenbank, wenn Sie MVC4 WebSecutiy() für die Authentifizierung und Autorisierung von Benutzern verwenden möchten. Dies könnte die Ausnahme auslösen.

In diesem Fall, in dem Sie die für den Mitgliedschaftsanbieter erforderlichen Tabellen nicht erstellen können, müssen Sie dies aus dem System ausschließen. Siehe hierzu here. Alternativ erstellen Sie ein neues MVC4-Projekt und wählen Sie eine leere Vorlage aus und fügen Sie einfach die benötigten Bits ein.

+1

Die Anmeldeinformationen sind alle korrekt, ich verstehe nur nicht, warum MVC 4 beschließt, zu versuchen, eine bereits vorhandene Tabelle zu erstellen? (tut mir leid, ich bin neu hier) –

+0

Ist Ihr DbContext mit DataDbContext Verbindungszeichenfolge? MVC4 wird auch eine Standardverbindungszeichenfolge haben. Ändern Sie diese Einstellung so, dass sie mit Ihrer DataDbContext-Verbindungszeichenfolge übereinstimmt. Wie ich schon sagte, wird MVC4 versuchen, einige Benutzer Tabellen zu erstellen, wenn Sie die integrierte WebSecurity() verwenden, um die Benutzer zu behandeln. – CR41G14

+0

Ich habe die Standardverbindung auf die gleiche wie DataDbContext geändert, die nichts zu ändern scheint. Ich vermute, dass in WebSecurity() aktiviert ist, gibt es trotzdem, um MVC4 daran zu hindern, dies zu tun (Erstellen von Benutzer-Tabellen)? –

18

Ich weiß, es ist alt, aber da ich die gleichen Probleme hatte und ich brauchte eine Weile, um die Lösung zu finden ... Ich beschloss, die Informationen zu teilen. So hatte ich 2 Dinge zu tun, dieses Problem loszuwerden, 1. die Migrationen wurde zu deaktivieren:

# Migrations/Configuration.cs 
internal sealed class Configuration : DbMigrationsConfiguration<IntranetApplication.Models.MyDb1> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

aber das war nicht genug, ich hatte auch sicherstellen, dass die Seeder nicht ausgeführt. Sie können es mit diesem zusätzlichen Code aufheben:

#Global.asax.cs 
protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    Database.SetInitializer<Models.MyDb1>(null); 
    Database.SetInitializer<Models.MyDb2>(null); 

    ... 
} 

Dann endlich kann ich nun eine SELECT mit LINQ tun und haben nur Zugriff READ

EDIT
Wie pro Lawrence Vorschlag, es ist höchstwahrscheinlich besser Sie haben es direkt in DB Context Constructor. Danke für den Tipp, ich habe meinen Code aktualisiert. Es würde stattdessen so aussehen:

public partial class MyDb1 : DbContext 
{ 
    public MyDb1() 
     : base("name=MyDb1Connection") 
    { 
     Database.SetInitializer<Models.MyDb1>(null); 
    } 

    ... 
} 
+3

Dies ist für Entity Framework nur für Lesezugriffe wichtig und sollte als Antwort markiert sein. Ohne dies können Sie das Zeitlimit nicht ändern, ohne dass EF versucht, zu migrieren. Dies muss jedoch nicht im Application_Start erfolgen. wenn das im Konstruktor von modelContext gemacht werden kann. –

+0

Danke, das hat meinen Speck gerettet. Dies sollte als die richtige Antwort markiert werden. – camainc

Verwandte Themen