Possiedo un sito Web ASP.NET MVC 3 Beta che utilizza SQL Server CE 4.0. Con entrambi ScottGu's NerdDinner example e il mio codice, io a volte ottenere la seguente eccezione non appena provo ad accedere al database:Perché EF4 sta cercando di ricreare il mio database anche se il modello non è cambiato?
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
io non riesco a capire il motivo per cui questo funziona a volte con un file .dbf esistente e altre volte si lamenta. Ho anche provato ad impostare esplicitamente il comportamento predefinito con
Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<...>());
Qualcun altro ha provato questo?
- riavviare Cassini non sembra fare la differenza.
- Quando si riceve l'aggiornamento in IE dopo aver ricevuto questo errore, verrà correttamente caricata la stessa pagina esatta.
Dal tuo stacktrace: 'CreateDatabaseOnlyIfNotExists'. L'EF sta * cercando * di fare la cosa giusta. Ma in qualche modo il controllo per vedere se il DB esiste fallito. Guarda in quello. –
Ecco la cosa strana. Il caricamento del codice/dei simboli di .NET Framework e il debug del codice in realtà impediscono il verificarsi del problema. Ogni volta. Non capisco – Jedidja