Mam witrynę ASP.NET MVC 3 Beta przy użyciu programu SQL Server CE 4.0. Zarówno ScottGu's NerdDinner example i mój własny kod, będę czasami uzyskać następujący wyjątek jak tylko próbować uzyskać dostęp do bazy danych:Dlaczego EF4 próbuje ponownie utworzyć moją bazę danych, mimo że model się nie zmienił?
File already exists. Try using a different database name. [ File name = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ] Line 17: public ActionResult Index() Line 18: { Line 19: var dinners = from d in nerdDinners.Dinners Line 20: where d.EventDate > DateTime.Now Line 21: select d; [SqlCeException (0x80004005): File already exists. Try using a different database name. [ File name = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ]] System.Data.SqlServerCe.SqlCeEngine.ProcessResults(IntPtr pError, Int32 hr) +92 System.Data.SqlServerCe.SqlCeEngine.CreateDatabase() +1584 System.Data.SqlServerCe.SqlCeProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 timeOut, StoreItemCollection storeItemCollection) +287 System.Data.Objects.ObjectContext.CreateDatabase() +84 System.Data.Entity.Internal.DatabaseOperations.Create(ObjectContext objectContext) +35 System.Data.Entity.Infrastructure.Database.Create() +70 System.Data.Entity.Infrastructure.CreateDatabaseOnlyIfNotExists`1.InitializeDatabase(TContext context) +360 System.Data.Entity.Infrastructure.Database.Initialize() +272 System.Data.Entity.Internal.InternalContext.Initialize() +90 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +34 System.Data.Entity.Internal.Linq.EfInternalQuery`1.Initialize() +140 System.Data.Entity.Internal.Linq.EfInternalQuery`1.get_Provider() +29 System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +34 System.Linq.Queryable.Where(IQueryable`1 source, Expression`1 predicate) +63 NerdDinner.Controllers.HomeController.Index() in D:\Sourcecode\NerdDinner\NerdDinner\Controllers\HomeController.cs:19
Nie mogę zrozumieć, dlaczego to działa czasami z istniejącego pliku .dbf i innych czasach narzeka. Próbowałem nawet jednoznacznie ustawić domyślne zachowanie z
Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<...>());
Czy ktoś inny tego doświadczył?
- Ponowne uruchomienie Cassini nie wydaje się mieć znaczenia.
- Odsłonięcie w IE po otrzymaniu tego błędu spowoduje, że dokładnie ta sama strona zostanie załadowana poprawnie.
ze swojego stacktrace: 'CreateDatabaseOnlyIfNotExists'. EF * próbuje * zrobić właściwą rzecz. Ale jakoś sprawdzić, czy DB istnieje nie powiodło się. Spójrz na to. –
Oto dziwna rzecz. Ładowanie symboli/kodu ramek .NET i debugowanie kodu faktycznie zatrzymuje problem. Każdego razu. Nie rozumiem tego. – Jedidja