11

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(モデル)

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と関係があるに違いありませんか?

どんな助けでも大歓迎です!

ありがとう

4

3 に答える 3

23

古いことは知っていますが、同じ問題があり、解決策を見つけるのに時間がかかったので...情報を共有することにしました。したがって、この問題を取り除くために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);

    ...
}

そして最後に、LINQを使用してSELECTを実行し、READアクセスのみを取得できるようになりました。EDIT

ローレンス
の提案によると、DBコンテキストコンストラクター内に直接配置する方がおそらく良いでしょう。ヒントをありがとう、私は私のコードを更新しました、そしてそれは今このように見えます:

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

    ...
}
于 2014-02-04T22:02:16.253 に答える
3

正しいデータベースをweb config指していますか?

クレデンシャルは正しいですか?

MVC4 WebSecutiy()を使用してユーザーの認証と承認を処理する場合、EntityFrameworkはデータベースにテーブルを作成します。これは例外をスローしている可能性があります。

メンバーシッププロバイダーに必要なテーブルを作成できないこの場合、これをシステムから除外する必要があります。こちらをご覧ください。または、新しいMVC4プロジェクトを作成し、空のテンプレートを選択して、必要なビットを入力します。

于 2013-02-06T11:06:14.523 に答える
0

一部のコードをリファクタリングして名前を変更した後、同様のエラーが発生しました。問題は、私のC#コードがデータベースのテーブル名と一致しなかったことです。

C#の私のコード:

public virtual DbSet<MyTableName>

そしてSQLServerのテーブル名:

MyActualTableName

テーブル名が一致しなかったため(MyTableName!= MyActualTableName)、次の(誤解を招く)エラーが発生しました:

Create TABLE permission denied in database MyDatabase

何を台無しにしたかを確認するのにしばらく時間がかかりましたが、テーブル名を一致させるとエラーが解決しました。

于 2019-06-14T16:49:21.997 に答える