Witam serdecznie.
Napotkałem na pewien problem z code first.
Chciałbym aby EF automatycznie wygenerował mi bazę wraz z tabelami w zależności od wcześniej zadeklarowanych modeli.
I za każdym uruchomieniem programu kasował tę bazę i wypełniam danymi z powrotem.
Problem w tym, że nie wiem, gdzie ta baza się tworzy ( nigdzie jej nie ma ) a powinna chyba być w MS SQL Managerze.
W web.configu znajduje się domyślny ConnectionString wygenerowany przez EF.
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-SklepInternetowy-20140409105508.mdf;Initial Catalog=aspnet-SklepInternetowy-20140409105508;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Natomiast opróćz tego mam swoje modele zawierające odpowiednie właściwości:
np. Uzytkownik, Produkt, Zamówienie.
Te modele rejestruję w moim kontekście:
public class MyContext : DbContext
{
public MyContext()
{
}
public DbSet<Address> Addresses { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<ProductCategory> ProductCategoriess { get; set; }
public DbSet<ProductDescription> ProductDescriptionss { get; set; }
public DbSet<Suplier> Supliers { get; set; }
}
Następnie do tego kontekstu stworzyłem sobie klasę z Inicjalizerem:
public class ContextInitializer : DropCreateDatabaseAlways<MyContext>
{
protected override void Seed(MyContext context)
{
var userSeed = new List<User>
{
new User
{
UserId = 1, UserName = "Admin", Password = "admin123", Email = "admin@gmail.com",
UserAvatarUrl = "~/Content/images/useravatar/", FirstName = "Admin", LastName = "Kowalski",
AccountStatus = AccountType.Administrator, AdresId = 1, Age = 22, DiscountPoints = 600,
RegistrationDate = DateTime.UtcNow, IsActivated = ActivationStatus.Yes
},
};
///////////////// wiecej obiektów.......
foreach (var userItem in userSeed) // dodanie usera do tabeli users
{
context.Users.Add(userItem);
}
context.SaveChanges(); // zapisanie zmian
base.Seed(context); // wywołanie metody seed
}
}
W ten sposób chciałbym utworzyć obiekty zawierające fakowe dane i wpisać je do mojej bazy.
ContextInitializer : DropCreateDatabaseAlways<MyContext>
Następnie ten inicjalizer dodałem do global.asax:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>()); // dodanie inicjalizera
}
}
I nie chce to zagrać ;/ Co robię źle? Gdzie znajduje się ta baza, którą rzekomo EF powinien sam utworzyć?
Bardzo proszę o pomoc :)