在下面的代码中,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.动作动作) + 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 source, System.Linq.Expressions.Expression> predicate) + 0x55 bytes
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# [本机到托管转换]
[托管到本机转换]
mscorlib.dll!System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext, string[] activationCustomData) + 0x66 字节 Microsoft.VisualStudio.HostingProcess.Utilities .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 callback, object state, bool preserveSyncCtx) + 0x9 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x57 字节
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x51 字节
[原生到托管转换]
调试器显示
'SBD.Syrius.UI.vshost.exe'(托管 (v4.0.30319)):已加载 'E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.UI\bin\Debug\SBD.Syrius.Synchronisation.dll',已加载符号。System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的第一次机会异常 System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的第一次机会异常类型的第一次机会异常System.Data.dll 中发生“System.Data.SqlClient.SqlException” System.Data.Entity.dll 中发生“System.Data.EntityCommandExecutionException”类型的第一次机会异常“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)
{
}
}
}