2010-10-07 14 views
11

Utworzono klasę db Context i dodałem ciąg połączenia w pliku web.config zgodnie z instrukcją w Scott Guthrie's Code First Development with Entity Framework 4. Używam go z metody testowej. Otrzymałem kilka błędów bazy danych podczas testów, ale kiedy w końcu wyczyściłem klasy, aby test się powiódł, nadal nie miałem bazy danych w folderze App_data.Kod źródłowy Entity Najpierw nie generuje bazy danych

Dodałem Database.CreateIfNotExists() do konstruktora dbContext, ale nadal nie ma pliku sdf. Czy ktoś wie, co robię źle?

Odpowiedz

23

Aby baza danych została utworzona automatycznie, nazwa ciągu połączenia musi być dokładnie nazwana jako nazwa podklasy DbContext (z przestrzenią nazw).

Np. Że twoja klasa DB jest tak:

namespace MyNamespace 
{ 
    public class FooDb : DbContext 
    {  
     public DbSet<XXX> ABC{ get; set; } 
    } 
} 

Twój ciąg połączenia powinien wyglądać tak:

<connectionStrings> 
    <add name="MyNamespace.FooDb" connectionString="Data Source=|DataDirectory|MyNamespace.FooDb.sdf" providerName="System.Data.SqlServerCe.4.0"/> 
    </connectionStrings> 
+0

obszaru nazw lub nie, nie podlega kwestii dla mnie. – Alex

3

wyboru produktu SQL Server Management Studio -> \ SQLEXPRESS

To gdzie CF jest odpychający. wszystkie moje bazy danych, gdy nie określiłem ciągu połączenia.

+0

To prawda, że ​​bez ciągów połączeń baza danych jest tworzona w katalogu roboczym serwera WWW. – Jonx

2

Zobacz tutaj automatycznego tworzenia .sdf EF 4.1 i pakietu SQL CE Nuget (lub nowy projekt MVC 3 podobno):

http://www.goatly.net/2011/6/27/entity-framework-code-first-the-path-is-not-valid-check-the-directory-for-the-database.aspx

Krótko mówiąc: Utwórz pusty Folder App_Data - plik sdf jest tworzony automatycznie, ale tylko wtedy, gdy obecny jest folder, w którym się znajduje.

+0

-1 bez wyjaśnienia boli społeczność, zwłaszcza jeśli unieważnią rozsądną odpowiedź. To działało dla mnie i zajęło dużo czasu, aby się dowiedzieć. Wróciłem do postu, który nie dostarczył odpowiedzi i dostarczyłem to, co znalazłem. Dlaczego minus? –

0

Upewnij się, że używając poprawnej dbcontext ciąg połączenia pewne rzeczy podobny jak ten

public class DBContext : IdentityDbContext<ApplicationUser> 
    { 
     public DBContext() 
      : base("DefaultConnection", throwIfV1Schema: false) 
     { 
     } 
} 

A w web.config

<add name="DefaultConnection" connectionString="Server=....;Connection Timeout=300;" providerName="System.Data.SqlClient" /> 
Powiązane problemy