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 似乎以两种方式处理数据库模型更改:其一,它丢弃旧数据库并重新创建一个新数据库;或二,直到用户手动修改它才会保留内容,正如@devdigital 到EF 4.1 CF 的链接所确认的那样:数据库 'master' 中的 CREATE DATABASE 权限被拒绝。Slauma 建议使用 Database.SetInitializer(null); 确保在创建后不会删除生产数据库是很好的,但不会像我试图做的那样从空数据库中创建表结构。考虑到这一点,我的 DBA 授予我创建访问权限,因为他希望我们不必手动创建每个表,所以这不再是问题。

P.S. -- the database drop I mentioned came as a result of using one of the drop initialization strategies, probably DropCreateDatabaseAlways. Glad to know it was doing it's job.

于 2012-08-01T20:47:14.667 回答