我已经在代码优先 EF上准备好我的模型,我在sql express上尝试了它,它可以工作。但是我在将其转换为sql server时遇到了问题: 我没有重新创建数据库的权限,我只能将表添加到空数据库中。
我已经看到了这个答案,但是当我尝试复制它时,我在上下文部分遇到了一些问题:
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();
        }
    }
}
谢谢卢卡斯·卡布特!