Mam małą aplikację w WinFormsach, która umożliwia użytkownikowi dodawanie/edycję/usuwanie rekordów w lokalnej bazie danych. Mam problem z poprawną obsługą danych między kolejnymi startami aplikacji. Obecnie za każdym odpaleniem aplikacji tworzę nową bazę i wypełniam ją przykładowymi danymi. Chciałbym jednak, żeby aplikacja cały czas działała na jednej bazie, tzn, żeby wszystkie zmiany były zapisywane. Niestety nie wiem jak to osiągnąć. Klasa odpowiedzialna za wypełnienie przykładowymi danymi:
public class ExampleDataFiller
{
public BloodBankContext bloodBankContext;
public List<BloodDonor> ExampleDonators;
public ExampleDataFiller (BloodBankContext bloodBankContext)
{
this.bloodBankContext = bloodBankContext;
ExampleDonators=new List<BloodDonor>();
BloodDonor bloodDonor1 = new BloodDonor()
{
FirstName="Marcus",
LastName="Wilkins",
DateofBirth=new DateTime(1960, 10, 27),
DateOfRegistration=DateTime.Now,
BloodType=BloodTypes.ABRHminus,
};
ExampleDonators.Add(bloodDonor1);
BloodDonor bloodDonor2 = new BloodDonor()
{
FirstName = "Raul",
LastName = "Davies",
DateofBirth = new DateTime(1958, 08, 26),
DateOfRegistration = DateTime.Now,
BloodType = BloodTypes.ARHminus,
};
ExampleDonators.Add(bloodDonor2);
BloodDonor bloodDonor3 = new BloodDonor()
{
FirstName = "Richard",
LastName = "Lance",
DateofBirth = new DateTime(1981, 07, 02),
DateOfRegistration = DateTime.Now,
BloodType = BloodTypes.ORHplus,
};
ExampleDonators.Add(bloodDonor3);
BloodDonor bloodDonor4 = new BloodDonor()
{
FirstName = "Leonard",
LastName = "Spencer",
DateofBirth = new DateTime(1955, 06, 03),
DateOfRegistration = DateTime.Now,
BloodType = BloodTypes.ARHplus,
};
ExampleDonators.Add(bloodDonor4);
BloodDonor bloodDonor5 = new BloodDonor()
{
FirstName = "Jennifer",
LastName = "Hays",
DateofBirth = new DateTime(1960, 01, 13),
DateOfRegistration = DateTime.Now,
BloodType = BloodTypes.ARHplus,
};
ExampleDonators.Add(bloodDonor5);
foreach (var donor in ExampleDonators)
{
bloodBankContext.BloodDonors.Add(donor);
bloodBankContext.SaveChanges();
}
}
}
Moja klasa dziedzicząca po DbContext:
public class BloodBankContext: DbContext
{
public BloodBankContext() : base("BloodBankDatabase1")
{
Database.SetInitializer<BloodBankContext>(new DropCreateDatabaseAlways<BloodBankContext>());
}
public DbSet<BloodDonor> BloodDonors { get; set; }
public DbSet<BloodDonation> BloodDonations { get; set; }
public DbSet<StoredBlood> storedBlood { get; set; }
}
Utworzenie bazy, wypełnienie przykładowymi danymi i wyświetlenie:
public partial class BloodBankManager : Form
{
public static BloodBankContext context;
public BloodBankManager()
{
InitializeComponent();
context = new BloodBankContext();
ExampleDataFiller exampleDataFiller = new ExampleDataFiller(context);
dataGridView1.DataSource = context.BloodDonors.Local.ToBindingList();
comboBox1.DataSource = Enum.GetValues(typeof(BloodTypes));
}
}
Kombinowałem z dwoma innymi initializerami, jak również napisałem swój własny, jednak nie potrafię osiągnąć tego co chcę.
Podsumowując: jak za pomocą Entity Frameworka poprawnie przechowywać dane pomiędzy kolejnymi startami aplikacji?