#mvc #entityframework #aspdotnet #aspnet
Mam projekt MVC z podłączoną do niego bazą danych z Windows Azure. Nie jest to najszczęścliwsze rozwiązanie, bo jak coś zmieniam w bazie podczas testów (dodawania nowych rzeczy do strony itp) to automatycznie strona będąca w internecie się wywala (bo baza danych została zmieniona, a kod został ten sam, bo nie jest opublikowany jeszcze).
Chcę zrobić tak, żeby u mnie lokalnie na komputerze, strona korzystała z bazy localDb,
Mam projekt MVC z podłączoną do niego bazą danych z Windows Azure. Nie jest to najszczęścliwsze rozwiązanie, bo jak coś zmieniam w bazie podczas testów (dodawania nowych rzeczy do strony itp) to automatycznie strona będąca w internecie się wywala (bo baza danych została zmieniona, a kod został ten sam, bo nie jest opublikowany jeszcze).
Chcę zrobić tak, żeby u mnie lokalnie na komputerze, strona korzystała z bazy localDb,
@niepoprawnyhumanista: dobra, dzisiaj wprowadziłem lokalnie zmiany jakie chciałem, opublikowałem mój kod, ale strona się wysypała, bo baza danych nieaktualna. Przydałoby się chyba zrobić migrację na bazie na Windows Azure. Tylko jak? Package Manager Console na moim VisualStudio update'uje tylko moją lokalną bazę.
BTW: czy to nie powinno się w ogóle zrobić automatycznie? Mam zaznaczoną przy publikacji opcję "Execute Code First Migrations"
BTW: czy to nie powinno się w ogóle zrobić automatycznie? Mam zaznaczoną przy publikacji opcję "Execute Code First Migrations"
@Pietrek558: tak, powinno się zrobić automatycznie. Musiałeś coś źle zrobić.
W konstruktorze DataContext'u możesz też dać coś takiego:
Gdzie Configuration to Twoja klasa z Configuration.cs
Mam nadzieje, ze wykonałeś również polecenie Add-Migration po zmianie modelu. Wtedy w folderze z migracjami dojdzie Ci nowy plik.
Dodanie tego co napisałem powyżej, spowoduje, że EF samo odpali migracje, gdy sprawdzi czy wpisy w __MigrationHistory pasują do Twoich plików z migracjami w projekcie.
W konstruktorze DataContext'u możesz też dać coś takiego:
Database.SetInitializer(new MigrateDatabaseToLatestVersion());
Gdzie Configuration to Twoja klasa z Configuration.cs
Mam nadzieje, ze wykonałeś również polecenie Add-Migration po zmianie modelu. Wtedy w folderze z migracjami dojdzie Ci nowy plik.
Dodanie tego co napisałem powyżej, spowoduje, że EF samo odpali migracje, gdy sprawdzi czy wpisy w __MigrationHistory pasują do Twoich plików z migracjami w projekcie.
Mam sobie relację Project.CreatedBy = ApplicationUser.Id. Ponieważ obydwie entity mają soft delete w OnModelCreate mam:
modelBuilder.Entity().HasOptional(i => i.CreatedBy).WithOptionalDependent().WillCascadeOnDelete(false);
Problem polega na tym, że jak pobieram userów: var users = context.Users zapytanie SQL w uproszczeniu wygląda tak:
SELECT [...] FROM AspNetUsers INNER JOIN Projects
przez co jeśli użytkownik utworzył 10 projektów to mam go w kolekcji 10 razy. A chcę tylko raz.
property
Przedmioty i nauczyciele czyli userzy:
public partial class LicenseArea
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection Users { get; set; }
}
Klasa User musi wtedy posiadać nast. pole:
public virtual LicenseArea LicenseArea { get; set; }
I relacja działa