0

Model-First アプローチと Oracle データベースを使用しています。

Update2: 修正済み

seedデータを含めると、 「DeleteDatabase はプロバイダーによってサポートされていません」というエラーが表示されます。

UPDATE1シード データ型を
public class MySeedData : DropCreateDatabaseAlways<ToolContext>から
public class MySeedData : DropCreateDatabaseIfModelChanges<ToolContext>
このエラーに変更すると、別のエラーに置き換えられます。

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に関連するものは何もないので、ここで何かが欠けているようです

参考文献

スタックトレース

 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)

私がここに欠けているものを提案してください。

4

1 に答える 1

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 はプロバイダーでサポートされていません
  2. DbContext インスタンスが Code First パターンを使用して作成されていないため、例外モデルの互換性を確認できません。ObjectContext から作成された、または EDMX ファイルを使用して作成された DbContext インスタンスは、互換性をチェックできません

Microsoft リンクシード データベースが機能しない

これが他の誰かに役立つことを願っています。

于 2013-06-19T18:07:42.243 に答える