2013-10-14 52 views
4

我已經準備好我的模型上代碼第一EF我試試的SQL Express它的工作原理。但我有一個問題,將其轉換爲sql server我沒有權限重新創建數據庫我只能將表添加到空數據庫代碼第一:創建表,但不是數據庫

我已經看到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的最後一個工具的更好解決方案?

編輯:

最後是:

的DbContext:

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!

+0

不要寫你自己的初始化啓動,但使用標準的,如' Database.SetInitializer(新的DropCreateDatabaseAlwa ys ());'查看[DropCreateDatabaseAlways](http://msdn.microsoft.com/en-us/library/gg679506%28v=vs.103%29.aspx)。 –

+0

因爲我的憑證我不能刪除數據庫並重新創建它我只能在現有的空數據庫上創建表格 – rlartiga

回答

2

該示例中的Context類應該是您的DbContext類,即指定您的DbSet<> s的類。

例子:

的DbContext類

public class DataContext : DbContext { 
    public DbSet<Customer> Customers { get; set; } 
} 

DatabaseInitializer

public class DropCreateDatabaseTables : IDatabaseInitializer<DataContext> { 
    ... 
} 
+0

我嘗試瞭解決方案,但我不知道它是如何做的:我可以使用代碼編輯我的文章你告訴我是否正確? – rlartiga

+0

繼續,我可以嘗試看看你的...我雖然你只是編譯你的代碼的問題,所以我沒有寫入初始化程序的任何實現 –

+0

不要擔心它的工作我編輯的問題與正確的代碼。謝謝! – rlartiga

相關問題