在下面的代碼中,ConfigSetting是一個實體,Db是我的上下文。 當我踏進下面一行在我的調試器爲什麼FirstOrDefault調用SaveChanges?
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 bytes
EntityFramework.dll!System.Data.Endity.Migrations.Infrastructure.MigratorBase.SeedDatabase()+ 0x40 bytes
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 bytes
EntityFramework.dll!System.Data.Entity.Migrations .DbMigrator.Update(string targetMigration)+ 0x547 bytes
EntityFramework.dll!System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update()+ 0x34 bytes 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!系統.D ata.Entity.Internal.InternalContext.PerformDatabaseInitialization.AnonymousMethod _6()+ 0x55的字節 EntityFramework.dll!System.Data.Entity.Internal.InternalContext.PerformInitializationAction(System.Action動作)+ 0x74字節
EntityFramework.dll!系統.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+ 0x17d bytes
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase.AnonymousMethod__4(System.Data.Entity.Internal.InternalContext c)+ 0x30 bytes
EntityFramework.dll!System.Data.Entity.Internal.RetryAction.PerformAction(System.Data.Entity.Internal.InternalContext input)+ 0xa2 bytes
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()+ 0×46字節
EntityFramework.dll!System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(的System.Type的EntityType)+ 0x2d字節 EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet。 Initialize()+ 0x97 bytes
EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet.InternalContext.get()+ 0x32 bytes EntityFramework.dll!System.Data.Entity.Infrastructure.DbQuery.System.Linq .IQueryable.Prov ider.get()+ 0x8c bytes
System.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()Line 262 + 0x1d6 bytes C# SBD.Syrius.UI.exe!SBD.Syrius.UI.Program 。主要(字符串[]參數)線34個+ 0X24字節C# [原產於託管過渡]
[託管到純過渡]
mscorlib.dll中!System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext,字符串[] activationCustomData)+ 0x66字節 Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()+ 0x8d bytes
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.T hreading.ExecutionContext executionContext,System.Threading.ContextCallback回調,對象狀態,布爾preserveSyncCtx)+ 0x285字節 mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback回調,對象狀態,bool preserveSyncCtx)+ 0x9 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state)+ 0x57 bytes
mscorlib.dll!System.Threading .ThreadHelper.ThreadStart()+ 0x51字節
[原產於託管過渡]
調試器顯示
'SBD.Syrius.UI.vshost.exe'(管理(v4.0.30319)):加載「E:\ EShared \ Syrius6 \ syrius_syrius \ SBD.Syrius.UI \ BIN \調試\ 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.Entity.dll中發生第一次機會異常類型'System.Data.EntityCommandExecutionException' 步入:跳過不帶符號的系統的方法。 Data.Entity.Infrastructure.DbContextInfo.CreateActivator.AnonymousMethod__0' 步驟到:步進以上方法沒有符號「System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance」 步驟到:步進以上方法沒有符號「System.Data.Entity.Migrations.DbMigrator.SeedDatabase」
[更新]
約初始化
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)
{
}
}
}
信息
可以請你提供調試器嗎? – DevEstacion
完成後,我還禁用了「只是我的代碼」,並能看到調用堆棧 –
您應該顯示您的Application_Start方法,或者無論您在何處配置EF初始化。 –