次のコードでは、ConfigSetting はエンティティであり、Db は私のコンテキストです。デバッガーで次の行にステップインすると
ConfigSetting config = this.Db.ConfigSettings.FirstOrDefault(o => o.Name == kSiteGuid);
SaveChanges イベントのコンテキストにいることがわかりました。
データベースは既に存在するため、EF はそれをシードしようとしません。
コールスタックは
SBD.Syrius.DataLayer.dll!SBD.Syrius.DataLayer.Context.SaveChanges() 行 338 C# EntityFramework.dll!System.Data.Entity.Migrations.DbMigrator.SeedDatabase() + 0x9e バイト
EntityFramework.dll!System.Data. Entity.Migrations.Infrastructure.MigratorBase.SeedDatabase() + 0x40 バイト
EntityFramework.dll!System.Data.Entity.Migrations.DbMigrator.Upgrade(System.Collections.Generic.IEnumerable pendingMigrations、文字列 targetMigrationId、文字列 lastMigrationId) + 0x38c バイト
EntityFramework. dll!System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(System.Collections.Generic.IEnumerable pendingMigrations, string targetMigrationId, string lastMigrationId) + 0x5e バイト
EntityFramework.dll!System.Data.Entity.Migrations.DbMigrator.Update(string targetMigration) + 0x547 バイト
EntityFramework.dll!System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update() + 0x34 バイト EntityFramework.dll!System. Data.Entity.MigrateDatabaseToLatestVersion.InitializeDatabase(SBD.Syrius.DataLayer.Context コンテキスト) + 0xa3 バイト EntityFramework.dll!System.Data.Entity.Database.SetInitializerInternal.AnonymousMethod_ 0(System.Data.Entity.DbContext c) + 0xd0 バイト
EntityFramework .dll!System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization.AnonymousMethod _6() + 0x55 バイト EntityFramework.dll!System.Data.Entity.Internal.InternalContext.PerformInitializationAction(System.Action アクション) + 0x74 バイト
EntityFramework.dll!System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + 0x17d バイト
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase.AnonymousMethod__4(System.Data.Entity.Internal.InternalContext c) + 0x30 バイト
EntityFramework.dll!System.Data.Entity.Internal.RetryAction.PerformAction(System.Data.Entity.Internal.InternalContext 入力) + 0xa2 バイト
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(System.アクション action) + 0x181 バイト
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + 0xa5 バイト
EntityFramework.dll!System.Data.Entity.Internal.InternalContext.Initialize() + 0x46 バイト
EntityFramework.dll!System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type entityType) + 0x2d バイト EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet.Initialize() + 0x97 バイト
EntityFramework.dll! System.Data.Entity.Internal.Linq.InternalSet.InternalContext.get() + 0x32 バイト EntityFramework.dll!System.Data.Entity.Infrastructure.DbQuery.System.Linq.IQueryable.Provider.get() + 0x8c バイト
システム。 Core.dll!System.Linq.Queryable.FirstOrDefault(System.Linq.IQueryable ソース、System.Linq.Expressions.Expression> 述語) + 0x55 バイト
SBD.Syrius.DataLayer.dll!SBD.Syrius.DataLayer.DataHelper.FindOrCreateSite() 262 行目 + 0x1d6 バイト C# SBD.Syrius.UI.exe!SBD.Syrius.UI.Program.Main(string[] args) 34 行目+ 0x24バイト C# [ネイティブからマネージドへの移行]
[マネージドからネイティブへの移行]
.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() + 0x8d バイト
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallback コールバック、オブジェクト状態、bool preserveSyncCtx) + 0x285 バイト mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading .ExecutionContext executionContext、System.Threading.ContextCallback コールバック、オブジェクト状態、bool preserveSyncCtx) + 0x9 バイト
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallback コールバック、オブジェクト状態) + 0x57 バイト
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x51 バイト
[Managed Transition にネイティブ]
デバッガーが表示されます
'SBD.Syrius.UI.vshost.exe' (Managed (v4.0.30319)): Loaded 'E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.UI\bin\Debug\SBD.Syrius.Synchronisation.dll',シンボルが読み込まれました。タイプ 'System.Data.SqlClient.SqlException' の最初のチャンスの例外が System.Data.dll で発生しました タイプ 'System.Data.SqlClient.SqlException' の最初のチャンスの例外が System.Data.dll で発生しました'System.Data.SqlClient.SqlException' が System.Data.dll で発生しました タイプ 'System.Data.EntityCommandExecutionException' の最初のチャンスの例外が System.Data.Entity.dll で発生しました タイプ 'System.Data.EntityCommandExecutionException の最初のチャンスの例外' System.Data.Entity.dll で発生しました タイプ 'System.Data.EntityCommandExecutionException' の最初のチャンス例外
[アップデート]
初期化子に関する情報
private static string _connectionString;
public Context()
: base(_connectionString )
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
}
public Context(string connString)
: base(connString)
{
_connectionString = connString;
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
}
public Context(string connString )
: base(connString)
{
_connectionString = connString;
}
構成クラスの場合
namespace SBD.Syrius.DataLayer.Migrations
{
using System.Data.Entity.Migrations;
public sealed class Configuration : DbMigrationsConfiguration<SBD.Syrius.DataLayer.Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(SBD.Syrius.DataLayer.Context context)
{
}
}
}