我正在写一个小项目,我遇到了一些我无法处理的问题。首次启动我的应用程序时,我希望用一些示例数据填充它。我是用这个课做的:
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();
}
}
}
我的应用程序允许用户在数据库中添加/删除/编辑数据。只要应用程序正在运行,所有这些似乎都能正常工作。 我关闭它然后重新开始的那一刻所有的变化都消失了。这是我的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; }
}
我知道这是由于我正在使用的初始化程序的事实: DropCreateDatabaseAlways 但我一直在玩其他2个初始化程序,甚至编写了我自己的程序,但似乎没有什么对我有用。我唯一能做到的就是将我在数据库中的记录加倍。以下是我开始申请的方式:
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));
}
}
所以我的问题是:在应用程序发布之间存储数据的正确方法是什么?
答案 0 :(得分:0)
您不需要设置任何初始值设定项,但您的类必须设置一次此数据,并在再次添加数据库之前检查数据库中是否已有数据。
因此,如果您想要保持数据的原样,则需要将初始值设置为null
所以,像这样:
public class BloodBankContext : DbContext
{
public BloodBankContext()
: base("BloodBankDatabase1")
{
Database.SetInitializer<BloodBankContext>(null); // this means that keep the database data as it is and don't change it.
}
public DbSet<BloodDonor> BloodDonors { get; set; }
public DbSet<BloodDonation> BloodDonations { get; set; }
public DbSet<StoredBlood> storedBlood { get; set; }
}
你可以做这样的事情来检查数据是否已经初始化
public ExampleDataFiller (BloodBankContext bloodBankContext)
{
this.bloodBankContext = bloodBankContext;
// Only initialize the data if none is there
if(!bloodBankContext.BloodDonors.Any())
{
ExampleDonators=new List<BloodDonor>();
var bloodDonor1 = new BloodDonor()
{
FirstName="Marcus",
LastName="Wilkins",
DateofBirth=new DateTime(1960, 10, 27),
DateOfRegistration=DateTime.Now,
BloodType=BloodTypes.ABRHminus,
};
//.
//.
//.
// etc
}
}
希望有所帮助。