我正在尝试使用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类名与连接字符串名匹配。
答案 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。很高兴知道它正在做它的工作。