11

Tôi đang sử dụng ASP.NET MVC 4 - C# để kết nối với cơ sở dữ liệu trực tiếp, và danh sách kết quả, tuy nhiên khi tôi đi xem trang nó trả về lỗi sau:Kết quả bảng danh sách trong "CREATE TABLE permission bị từ chối trong cơ sở dữ liệu" 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 

Bộ điều khiển:

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

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

    } 
} 

AccControl.cs (model)

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" /> 

Tôi không cố tạo bảng? Tôi chỉ đang cố liệt kê các kết quả nên tôi vô cùng bối rối. Nó phải là một cái gì đó để làm với MVC?

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Cảm ơn

+0

Cấu hình web của bạn trỏ đến đúng cơ sở dữ liệu ?, bạn có thể cho chúng tôi khai báo và khởi tạo db không? – CR41G14

+0

bạn có thể đảm bảo rằng người dùng bạn đang sử dụng có quyền tạo cơ sở dữ liệu hay không. – MMK

+0

@MMK Tôi không thể thay đổi quyền truy cập –

Trả lời

2

web config của bạn có trỏ đến đúng cơ sở dữ liệu không?

Thông tin đăng nhập có chính xác không?

Khung thực thể sẽ tạo bảng trong cơ sở dữ liệu nếu bạn định sử dụng MVC4 WebSecutiy() để xử lý Xác thực và ủy quyền của người dùng. Điều này có thể là ném ngoại lệ.

Trong trường hợp này, nơi bạn không thể tạo các bảng cần thiết cho nhà cung cấp thành viên, bạn sẽ cần phải loại trừ điều này khỏi hệ thống. Xem phần này here. Hoặc tạo một dự án MVC4 mới và chọn mẫu trống và chỉ cần đặt vào các bit bạn cần.

+1

Các thông tin đăng nhập là tất cả chính xác, tôi chỉ không hiểu tại sao MVC 4 quyết định thử và tạo một bảng đã tồn tại? (xin lỗi tôi mới đến điều này) –

+0

DbContext của bạn có sử dụng chuỗi kết nối DataDbContext không? MVC4 cũng sẽ có một chuỗi kết nối mặc định. Thay đổi điều này thành giống như chuỗi kết nối DataDbContext của bạn. Giống như tôi đã nói MVC4 sẽ cố gắng và tạo ra một số người dùng bảng nếu bạn đang sử dụng được xây dựng trong WebSecurity() để xử lý người dùng. – CR41G14

+0

Tôi đã thay đổi kết nối mặc định thành giống như DataDbContext, điều này dường như không thay đổi gì cả. Tôi đoán được xây dựng trong WebSecurity() được kích hoạt, là có anyway để ngăn chặn MVC4 từ việc này (tạo bảng người dùng)? –

18

Tôi biết nó cũ nhưng kể từ khi tôi có cùng một vấn đề và nó đã cho tôi một thời gian để tìm giải pháp ... Tôi quyết định chia sẻ thông tin. Vì vậy, tôi đã phải làm 2 việc để thoát khỏi vấn đề này, 1st đã được vô hiệu hóa sự di cư:

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

tuy nhiên đó không phải là đủ, tôi cũng phải chắc chắn rằng các seeder không chạy. Bạn có thể hủy nó với mảnh thêm mã này:

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

    ... 
} 

Sau đó, cuối cùng tôi bây giờ có thể làm một SELECT với LINQ và chỉ có ĐỌC truy cập

EDIT
Theo đề nghị của Lawrence, có lẽ hầu hết tốt hơn có nó trực tiếp bên trong DB Context Constructor. Cảm ơn lời khuyên, tôi đã cập nhật mã của mình. Thay vào đó, nó sẽ trông giống như thế này:

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

    ... 
} 
+3

Điều này rất quan trọng đối với Khung thực thể chỉ đọc và phải được đánh dấu là câu trả lời. Nếu không có điều này, bạn không thể thay đổi thời gian chờ mà không cần EF cố gắng di chuyển. Tuy nhiên nó không cần phải được thực hiện trong Application_Start. nếu có thể được thực hiện trong hàm tạo của mô hìnhContext. –

+0

Cảm ơn, điều này đã cứu thịt xông khói của tôi. Điều này sẽ được đánh dấu là câu trả lời đúng. – camainc

Các vấn đề liên quan