使用Entity Framework Code First创建数据库模型时出现问题

时间:2012-08-01 15:00:57

标签: sql asp.net-mvc ef-code-first

我正在尝试使用Code First创建数据库模型,而不是创建数据库本身。也就是说,我的DBA已经建立了一个空数据库,我有权创建表,但不是整个数据库。但是,每当我尝试使用Code First设置模型时,我都会收到以下错误:

CREATE DATABASE permission denied in database 'master'.

这是Code First的工作方式,还是有某种方法可以修改现有的数据库?

P.S。 - 这是连接字符串 -

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

更新

Per @ 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类名与连接字符串名匹配。

1 个答案:

答案 0 :(得分:0)

似乎Entity Framework Code First以两种方式处理数据库模型更改:一,它丢弃旧数据库并重新创建一个新数据库;或者两个,在用户手动修改内容之前,它不会保留内容,正如@ devdigital与EF 4.1 CF: CREATE DATABASE permission denied in database 'master'的链接所肯定的那样。 Slauma建议使用Database.SetInitializer(null);确保生成数据库在创建后不会被删除,但不会像我试图那样在空数据库中创建表结构。考虑到这一点,我的DBA授予我创建访问权限,因为他宁愿我们不必手动创建每个表,所以它不再是问题了。

P.S。 - 我提到的数据库丢弃是由于使用了一个drop初始化策略,可能是DropCreateDatabaseAlways。很高兴知道它正在做它的工作。