2013-06-19 30 views
0

我使用Model-First方法和Oracle數據庫。DeleteDatabase不被提供者支持,Oracle使用Entity Framework

UPDATE2:現在

固定在包括seed數據,我得到這個錯誤「DeleteDatabase不是由供應商支持」

UPDATE1如果我改變從種子數據類型
public class MySeedData : DropCreateDatabaseAlways<ToolContext>
public class MySeedData : DropCreateDatabaseIfModelChanges<ToolContext>
此錯誤被替換爲b ÿ另一個錯誤:

Exception Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility

種子數據

public class MySeedData : DropCreateDatabaseAlways<ToolContext> 
    { 
     protected override void Seed(ToolContext context) 
     { 
      base.Seed(context); 

      var category = new List<CategoryValue> 
      { 
       new CategoryValue{Id=1, Name = "Associate"}, 
       new CategoryValue{Id =2, Name = "Professional"}, 
       new CategoryValue{Id=3, Name = "Master"}, 
       new CategoryValue{Id = 4, Name = "Product"}, 
       new CategoryValue{Id = 5, Name = "Portfolio"} 
      }; 

      category.ForEach(cert => context.CategoryValues.Add(cert)); 
      context.SaveChanges(); 
     } 
    } 

的Web.Config

<connectionStrings> 
    <add name="LMSPriorToolContext" 
      connectionString="metadata=res://*/Models.LMSPriorToolModel.csdl|res://*/Models.LMSPriorToolModel.ssdl|res://*/Models.LMSPriorToolModel.msl; 
provider=Oracle.DataAccess.Client; 
provider connection string=&quot;DATA SOURCE=DEV;PASSWORD=1234;PERSIST SECURITY INFO=True;USER ID=abc&quot;" 
providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

的Application_Start()

Database.SetInitializer<ToolContext>(new SeedData()); 

Main.cs:發生異常在此文件我知道,當你第一次嘗試訪問數據庫,種子數據的方法或腳本來執行。

using (var dbContext = new ToolContext()) 
     { 
      var items = dbContext.CategoryValues; 

      foreach(CategoryValue category in **items**) // **Getting error here** 
      { 
       Console.WriteLine(category.Name); 
      } 
     } 

參考好像我失去了一些東西,因爲其中沒有涉及到Oracle或ODAC

References

堆棧跟蹤

at System.Data.Common.DbProviderServices.DbDeleteDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) 
    at System.Data.Objects.ObjectContext.DeleteDatabase() 
    at System.Data.Entity.Internal.DatabaseOperations.DeleteIfExists(ObjectContext objectContext) 
    at System.Data.Entity.Database.Delete() 
    at System.Data.Entity.DropCreateDatabaseAlways`1.InitializeDatabase(TContext context) 
    at System.Data.Entity.Database.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c) 
    at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6() 
    at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) 

請有什麼建議我在這裏失蹤。

+0

你的系統上有什麼版本的Oracle.DataAccess.dll? – jfrankcarr

+0

11.2.0.3但是對於我使用Oracle10g的數據庫。另請檢查另一個有問題的錯誤 – Rohit

+0

此鏈接說明模型優先不支持種子:http://forums.asp.net/t/1722132.aspx/1 – Rohit

回答

0

Model-First方法不支持使用DropCreateDatabaseAlways or DropCreateDatabaseIfModelChanges種子數據的方式。

更改種子數據類:

public class ToolSeedData : IDatabaseInitializer<ToolContext> 
{ 
    public void InitializeDatabase(ToolContext context) 
    { 
     var category = new List<CategoryValue> 
     { 
      new CategoryValue{Id=1, Name = "Associate"}, 
      new CategoryValue{Id =2, Name = "Professional"}, 
      new CategoryValue{Id=3, Name = "Master"}, 
      new CategoryValue{Id = 4, Name = "Product"}, 
      new CategoryValue{Id = 5, Name = "Portfolio"} 
     }; 

     category.ForEach(cert => context.CategoryValues.Add(cert)); 

     context.SaveChanges(); 
    } 

可能出現的錯誤,如果你不使用它:

  1. DeleteDatabase is not supported by the provider
  2. Exception Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility

微軟鏈接Seeding database does not work

希望這可以幫助其他人。

相關問題