В следующем коде 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 байт
EntityFramework.dll! System.Data.Entity.Migrations.Infrastructure.MigratorBase.SeedDatabase() + 0x40 байт
EntityFramework.dll! System.Data.Entity.Migrations.DbMigrator.Upgrade (System .Collections.Generic.IEnumerable pendingMigrations, string targetMigrationId, строка lastMigrationId) + 0x38c байты
EntityFramework.dll! System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade (System.Collections.Generic.IEnumerable pendingMigrations, string targetMigrationId, строка lastMigrationId) + 0x5e байты
EntityFramework.dll! System.Data.Entity.Migrations .DbMigrator.Update (строка 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 с) + 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 байт
EntityFramework.dll! System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase.AnonymousMethod__4 (System.Data.Entity.Internal.InternalContext с) + 0x30 байт
EntityFramework.dll! System.Data.Entity.Internal.RetryAction.PerformAction (System.Data.Entity.Internal.InternalContext input) + 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. Инициализировать() + 0x97 байт
EntityFramework.dll! System.Data.Entity.Internal.Linq.InternalSet.InternalContext.get() + 0x32 байта EntityFramework.dll! System.Data.Entity.Infrastructure.DbQuery.System.Linq .IQueryable.Prov ider.get() + 0x8c байты
System.Core.dll! System.Linq.Queryable.FirstOrDefault (источник System.Linq.IQueryable, System.Linq.Expressions.Выражение> предикат) + 0x55 байт
SBD.Syrius.DataLayer.dll! SBD.Syrius.DataLayer.DataHelper.FindOrCreateSite() Строка 262 + 0x1d6 байт C# SBD.Syrius.UI.exe! SBD.Syrius.UI.Program .Главный (строка [] арг) Строка 34 + 0x24 байт C# [Род Managed Перехода]
[Успели Native Перехода]
mscorlib.dll! System.Runtime.Hosting.ApplicationActivator.CreateInstance (System.ActivationContext activationContext, строка [] activationCustomData) + 0x66 байт Microsoft.VisualStudio.HostingProcess.Utilities.dll! Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() + 0x8d байт
mscorlib.dll! System.Threading.ExecutionContext.RunInternal (System.T hreading.ExecutionContext executeContext, System.Threading.ContextCallback callback, состояние объекта, bool preserveSyncCtx) + 0x285 байт mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executeContext, System.Threading.ContextCallback callback, состояние объекта , BOOL preserveSyncCtx) + 0x9 байт
mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext ExecutionContext, System.Threading.ContextCallback обратного вызова, состояний объекта) + 0x57 байт
mscorlib.dll! System.Threading .ThreadHelper.ThreadStart() + 0x51 байт
[Родной для управляемого перехода]
Отладчик показывает
'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.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;
}
Для класса Configuration
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. –