【发布时间】:2013-10-14 21:14:33
【问题描述】:
我已经在 code first EF 上准备好了我的模型,我在 sql express 上进行了尝试,它可以工作。但我在将其转换为 sql 服务器 时遇到问题:我没有重新创建数据库的权限,我只能将表添加到空数据库中。
我已经看到 this answer ,但是当我尝试复制它时,上下文部分出现了一些问题:
public class DropCreateDatabaseTables : IDatabaseInitializer<Context> {
#region IDatabaseInitializer<Context> Members
public void InitializeDatabase(Context context)
我已经引用了 System.Data.Entity 但这不起作用,并且 Context 类不是 System.Runtime.Remoting.Contexts 上的引用
代码有问题吗?或者是使用 EF 的最后一个工具更好的解决方案?
编辑:
最后是:
数据库上下文:
public class PeopleContext: DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Adress> Adresses{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Add Entity type configuration classes
modelBuilder.Configurations.Add(new PersonConfiguration());
modelBuilder.Configurations.Add(new AdressConfiguration());
}
}
初始化器:
public class DropCreateDatabaseTables : IDatabaseInitializer<PeopleContext>
{
public void InitializeDatabase(PeopleContextContext)
{
bool dbExists;
using (new TransactionScope(TransactionScopeOption.Suppress))
{
dbExists = Context.Database.Exists();
}
if (dbExists)
{
// remove all tables
Context.Database.ExecuteSqlCommand("EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'");
Context.Database.ExecuteSqlCommand("EXEC sp_MSforeachtable @command1 = \"DROP TABLE ?\"");
// create all tables
var dbCreationScript = ((IObjectContextAdapter)Context).ObjectContext.CreateDatabaseScript();
Context.Database.ExecuteSqlCommand(dbCreationScript);
Context.SaveChanges();
}
else
{
throw new ApplicationException("No database instance");
}
}
}
呼叫:
class Program
{
static void Main(string[] args)
{
var person= new Person
{
Identifier= "John Doe"
};
Database.SetInitializer(new DropCreateDatabaseTables());
using (var context = new PeopleContext())
{
context.People.Add(person);
context.SaveChanges();
}
}
}
感谢 Lukas Kabrt!
【问题讨论】:
-
不要从编写自己的初始化程序开始,而是使用标准初始化程序,例如
Database.SetInitializer(new DropCreateDatabaseAlways<Context>());参见 DropCreateDatabaseAlways。 -
因为我的凭据我无法删除数据库并重新创建它,我只能在现有的空数据库上创建表
标签: c# entity-framework ef-code-first