Результатом таблицы листинга является "Разрешить CREATE TABLE в базе данных" ASP.NET MVC4

Я использую ASP.NET MVC 4 - С# для подключения к живой базе данных и перечисления результатов, однако, когда я перехожу к просмотру страницы, она возвращает следующую ошибку:

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

Контроллер:

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

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

    }
}

AccControl.cs(модель)

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

Я не пытаюсь создать таблицу? Я просто пытаюсь перечислить результаты, поэтому я очень смущен. Это должно быть что-то делать с MVC?

Любая помощь будет принята с благодарностью!

Спасибо

Ответ 1

Указывает ли ваш web config на правильную базу данных?

Правильны ли учетные данные?

Entity Framework создаст таблицы в базе данных, если вы собираетесь использовать MVC4 WebSecutiy() для обработки аутентификации и авторизации пользователей. Это может вызвать исключение.

В этом случае, когда вы не можете создать таблицы, необходимые для поставщика членства, вам нужно будет исключить это из системы. Смотрите здесь здесь. Альтернативно создайте новый проект MVC4 и выберите пустой шаблон и просто введите нужные вам биты.

Ответ 2

Я знаю это давно, но так как у меня были те же проблемы, и мне потребовалось некоторое время, чтобы найти решение... Я решил поделиться информацией. Поэтому мне пришлось сделать 2 вещи, чтобы избавиться от этой проблемы, 1-й отключил миграцию:

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

Однако этого было недостаточно, я также должен был убедиться, что Seeder не работает. Вы можете отменить его с помощью этой дополнительной части кода:

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

    ...
}

Затем, наконец, теперь я могу сделать SELECT с LINQ и иметь только доступ READ

ИЗМЕНИТЬ
Согласно предложению Лоуренса, скорее всего, лучше иметь его непосредственно внутри DB Context Constructor. Спасибо за подсказку, я обновил свой код. Вместо этого он выглядел бы следующим образом:

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

    ...
}

Ответ 3

Я обнаружил похожую ошибку после рефакторинга и переименования некоторого кода. Проблема заключалась в том, что мой код С# не совпадал с именем таблицы в базе данных.

Мой код в С#:

public virtual DbSet<MyTableName>

И имя таблицы в SQL Server:

MyActualTableName

Поскольку имена таблиц не совпадали (MyTableName! = MyActualTableName), я получил эту (вводящую в заблуждение) ошибку:

Create TABLE permission denied in database MyDatabase

Мне потребовалось некоторое время, чтобы увидеть, что я испортила, но соответствие имен таблиц устранило ошибку.