2013-06-19 32 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

希望这可以帮助其他人。

相关问题