2

データベース自体を作成せずに、Code First でデータベース モデルを作成しようとしています。つまり、DBA が空のデータベースをセットアップしました。この空のデータベースに対して、テーブルを作成する権限はありますが、データベース全体ではありません。ただし、Code First を使用してモデルを設定しようとすると、次のエラーが発生します。

CREATE DATABASE permission denied in database 'master'.

これは単に Code First が機能する方法ですか、それとも既存のデータベースを変更する方法はありますか?

PS -- これが接続文字列です --

<add name="HoursDb"         
     connectionString="Data Source=barksql.cedarville.edu;
                       Initial Catalog=Hours;
                       persist security info=True;
                       User ID=hours;
                       password=************;
                       multipleactiveresultsets=True;
                       App=EntityFramework"
     providerName="System.Data.SqlClient" />

アップデート

@devdigital のリクエストにより --

コンテキスト クラスは次のとおりです。

using System.Data.Entity;
using ....Models;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace LibraryAdmin.DAL
{
    public class HoursDb : DbContext
    {
        public DbSet<DaySpec> DaySpecs { get; set; }
        public DbSet<WeekSpec> WeekSpecs { get; set; }
        public DbSet<ExceptionHoursSet> ExceptionHoursSets { get; set; }
        public DbSet<Schedule> Schedules { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

データベースを接続にマッピングする限り、HoursDb クラス名は接続文字列名と一致するため、規則に従って行われると想定しています。

4

1 に答える 1

0

Entity Framework Code First は、データベース モデルの変更を 2 つの方法で処理しているように見えます。1 つは、古いデータベースを破棄して新しいデータベースを再作成する方法です。または 2 つ、@devdigital のEF 4.1 CFへのリンクで確認されているように、ユーザーが手動で変更するまでコンテンツを保存しません。Database.SetInitializer(null); を使用するという Slauma の提案。作成後に本番データベースが削除されないようにするのに適していますが、私がやろうとしていたように空のデータベースからテーブル構造を作成しません。これを考慮して、私の DBA は、すべてのテーブルを手動で作成する必要がないことを望んでいたため、私に作成アクセスを許可したので、もう問題ではありません。

PS -- 私が言及したデータベース ドロップは、ドロップ初期化戦略の 1 つ、おそらく DropCreateDatabaseAlways を使用した結果として発生しました。それが仕事をしていることを知ってうれしいです。

于 2012-08-01T20:47:14.667 に答える