C# 列表结果显示为“;“在数据库中创建表的权限被拒绝”;ASP.NET-MVC4

C# 列表结果显示为“;“在数据库中创建表的权限被拒绝”;ASP.NET-MVC4,c#,asp.net-mvc,asp.net-mvc-4,database-connection,database-permissions,C#,Asp.net Mvc,Asp.net Mvc 4,Database Connection,Database Permissions,我正在使用ASP.NET MVC 4-c#连接到实时数据库,并列出结果,但是当我查看页面时,它返回以下错误: 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 in

我正在使用ASP.NET MVC 4-c#连接到实时数据库,并列出结果,但是当我查看页面时,它返回以下错误:

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(模型)

名称空间TestDBCon.Models
{
公共类访问控制
{
公共int ID{get;set;}
公共int控制代码{get;set;}
公共字符串{get;set;}
公共字符串costcenter{get;set;}
公共字符串部门{get;set;}
}
公共类DataDbContext:DbContext
{
公共数据库集控件{get;set;}
}
}
Web.Config:

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

我不想创建一个表?我只是想列出结果,所以我非常困惑。这一定和MVC有关吧

任何帮助都将不胜感激


谢谢

您的
web配置
是否指向正确的数据库

凭证是否正确

如果要使用
MVC4 websecurity()
处理用户的身份验证和授权,实体框架将在数据库中创建表。这可能会引发异常


在这种情况下,如果无法创建成员资格提供程序所需的表,则需要将其从系统中排除。看这个。或者创建一个新的MVC4项目,选择空模板,然后输入所需的位。

我知道它很旧,但因为我有同样的问题,我花了一段时间才找到解决方案。。。我决定分享这些信息。所以我必须做两件事来解决这个问题,第一件事是禁用迁移:

# Migrations/Configuration.cs
internal sealed class Configuration : DbMigrationsConfiguration<IntranetApplication.Models.MyDb1>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }
}
#Migrations/Configuration.cs
内部密封类配置:DBMigOptionsConfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
}
然而,这还不够,我还必须确保播种机不会运行。您可以使用以下额外代码来取消它:

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

    ...
}
#Global.asax.cs
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
Database.SetInitializer(null);
Database.SetInitializer(null);
...
}
最后,我现在可以使用LINQ进行选择,并且只有读取权限

编辑
根据Lawrence的建议,将其直接放在DB上下文构造函数中可能更好。谢谢你的提示,我更新了我的代码,现在看起来是这样的:

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

    ...
}
公共部分类MyDb1:DbContext
{
公共MyDb1()
:base(“name=mydb1连接”)
{
Database.SetInitializer(null);
}
...
}

在重构和重命名一些代码后,我遇到了类似的错误。问题是我的C代码与数据库中的表名不匹配

我的c#代码:

由于表名不匹配(MyTableName!=MyActualTableName),我得到了以下(误导性)错误:

数据库MyDatabase中的创建表权限被拒绝


我花了一段时间才看到我弄糟了什么,但匹配表名解决了错误。

您的web配置是否指向正确的数据库?,您能向我们展示数据库的声明和初始化吗?您能确保您使用的用户具有创建数据库的权限吗。@MMK我不能亲自更改权限在Management Studio的服务器上,以您的应用程序连接的同一用户的身份登录,尝试创建一个新的数据库。您是否收到相同的错误?@Arran我无法创建新的数据库/表。但是我不需要,我只需要从他们那里读到凭据都是正确的,我只是不明白为什么MVC4决定尝试创建一个已经存在的表?(抱歉,我是新手)您的DbContext是否使用DataDbContext连接字符串?MVC4也将有一个默认的连接字符串。将其更改为与DataDbContext连接字符串相同。正如我所说,如果您使用内置的WebSecurity()来处理用户,MVC4将尝试创建一些用户表。我已将默认连接更改为与DataDbContext相同,这似乎没有改变任何内容。我猜内置WebSecurity()已启用,是否有任何方法阻止MVC4执行此操作(创建用户表)?空模板?简单记忆?从Account controller中删除Initialise属性?我设法使用ADO.NET实体数据模型使其工作。谢谢你们的帮助,伙计们!非常感谢。这对于只读的实体框架是至关重要的,应该标记为答案。如果不这样做,您就无法在EF不尝试迁移的情况下更改超时。但是,不需要在应用程序启动时执行此操作。如果可以在modelContext的构造函数中完成,谢谢,这节省了我的时间。这应标记为正确答案。
public partial class MyDb1 : DbContext
{
    public MyDb1()
        : base("name=MyDb1Connection")
    {
        Database.SetInitializer<Models.MyDb1>(null);
    }

    ...
}
public virtual DbSet<MyTableName>
MyActualTableName