Не може да се пресъздаде SQL Server Express база данни с Entity Framework Code First и MVC 3 без промяна на името на базата данни

Когато стартирам приложението със следния низ за връзка, файлът на базата данни се създава успешно.

<add name="ConnString1"
     connectionString="Data Source=.\SQLEXPRESS;
                       Database=Database1;
                       Integrated Security=SSPI;
                       AttachDBFilename=|DataDirectory|aspnetdb.mdf;
                       User Instance=true"
     providerName="System.Data.SqlClient" />

Ако изтрия файла на базата данни и се опитам да стартирам приложението отново, файлът на базата данни не може да бъде създаден и получавам следните вътрешни изключения:

The underlying provider failed on Open.
{"Cannot open database \"Database1\" requested by the login. The login failed.\Database1\nLogin failed for user 'computer\\someuser'."}

Ако променя Database=Database1 на Database=Database2 в низа за връзка, тогава файлът на базата данни е създаден успешно. Проблемът се повтаря винаги.

Как мога да пресъздам файла на базата данни, без да се налага да променя името на базата данни?


person adolfojp    schedule 16.01.2011    source източник
comment
Опитвали ли сте да използвате име на файл, различно от aspnetdb.mdf? Какви действия предприемате, за да изтриете съществуваща база данни?   -  person Brian Ball    schedule 16.01.2011
comment
Когато променя името на файла с базата данни, става по-странно. Ако променя името от aspnetdb.mdf на aspnet2.mdf, получавам грешка Database 'path\aspnetdb.mdf already exists. Изберете друго име на база данни. Не може да се прикачи пътят на файла\aspnet2.mdf като база данни DatabaseName.' където path е пътят, а DatabaseName е името на базата данни. Изтривам файловете на базата данни, като щраквам с десния бутон върху тях във Visual Studio и ги изтривам.   -  person adolfojp    schedule 17.01.2011
comment
намерихте ли решение за това? Аз имам подобен проблем. Правя стъпката за създаване на база данни в xUnit. Първият път работи добре; вторият път се проваля с Cannot open database "[my database name]" requested by the login. The login failed. Login failed for user '[my domain user name]'. Ако възстановя проекта, той отново работи в xUnit. Но ако се опитам да стартирам теста без повторно изграждане, той дава горната грешка.   -  person Ryan Lundy    schedule 16.02.2011
comment
Не намерих решение. Реших да спра да го използвам, докато не излезе от бета версията.   -  person adolfojp    schedule 20.02.2011
comment
Имам точно същия проблем. Използвам EF4.1 RTW, VS 2010 SP1, SQL Express (С SQL Engine 2008 SP1)... е много странно, трябва да преименувам името на базата данни по подразбиране всеки път, за да мога да генерирам базата данни със същото име на файл. Ще използвам SQL CE, докато не бъде решен.   -  person Nestor    schedule 01.06.2011


Отговори (2)


Проверете, за да се уверите, че правата на директорията ви позволяват да изтриете mdf файла и правата на директорията за влизане в схемата/таблицата за привилегии са често срещан проблем с mdf файловете поради високата степен на сигурност, поставена на тези файлове поради техния потенциално чувствителен характер

person Chris McGrath    schedule 03.08.2011

Виждам, че това е по-стара публикация - надявам се, че може да помогне на някой в ​​същото затруднение.

Използвайки код първо, първият път, когато приложението се стартира, то изгражда db без проблеми - знае, че не съществува, защото не го е изградило преди това. Кодът първо взема хеш стойност на използваните модели и я съхранява в новата база данни - проверете за таблица, наречена EdmMetadata - там се съхранява хеш стойността. Той използва хеш стойността, за да провери впоследствие дали моделът се е променил от компилация към компилация, така че да знае дали да премахне базата данни и да изгради отново.

При втория път, след като сте изтрили базата данни, тя търси липсващата база данни, за да сравни хеш стойността на модела, и не може да я намери, защото базата данни вече липсва.

Моето заобиколно решение е да добавя безсмислено поле (като не забравям да го изтрия след разработването) към един от моделите, за да принудя повторното изграждане, без да изтривам базата данни. Като алтернатива можете просто да промените db хеш стойността, за да принудите повторното изграждане.

Това работи с базите данни с първо приложение с код - не е толкова сигурно с базата данни за членство.

person Andrew Harvey    schedule 30.03.2013