PDA

View Full Version : سوال: استراتژی های راه اندازی پایگاه داده با Entity framework code first



iDeveloper
جمعه 25 دی 1394, 00:36 صبح
سلام خدمت اساتید محترم من در entity framework تازه کار هستم استراتژی های راه اندازی پایگاه داده رو به روش code first درک نمی کنم. اصلاً چرا باید دیتابیس هر بار پاک بشه و از نو ایجاد بشه؟؟؟؟؟ یعنی هرکی وارد سایت شد دیتابیس با هرچی اطلاعات داره پاک میشه؟! مثلاً تو خط پایین: public class MusicStoreDbInitializer : System.Data.Entity.DropCreateDatabaseAlways کلاس DropCreateDatabaseAlways کارش چیه؟ همچین بقیه کلاسهایی که در این رابطه استفاده میشن مثل CreateDatabaseIfNotExists و DropCreateDatabaseIfModelChanges؟ چرا باید از این کلاسها مشتق کنیم؟ ممنون میشم اساتید توضیح بدن بیشتر گیرم اونجاست که تو این استراتژی دیتابیس رو پاک می کنه! آیا زمان توسعه پروژه اینکار انجام میشه که برنامه نویس مدام schema دیتابیس رو دستی تغییر نده؟ یا وقتی پروژه برای آپلود روی هاست هم آماده شد این کدها استفاده میشن؟ ممنونم

abdullah20
جمعه 25 دی 1394, 12:40 عصر
سلام
نه دوست عزیز کی گفته باید دیتابیس با هر بار اجرای نرم افزار پاک بشه و دوباره ایجاد بشه؟
شما در وقتی دیتابیس ایجاد شد برای بار اول دیگه ایجاد شده و برای همیشه هست
البته مثلا در طول پیاده سازی پروژه شما نیازدارید تغیرات در پایگاه داده اعمال کنید که در این شرایط هم فقط یکبار دیتابیس ایجاد میشه و در دفعات بعدی تغییرات اعمال میشه و حذف نمیشه

iDeveloper
جمعه 25 دی 1394, 13:03 عصر
سلام دوست عزیز
من اینطور برداشت کردم که در entity framework به روش code first برای اینکه اطلاعات اولیه ای در دیتابیس بریزیم میایم یک کلاس به این شکل تعریف می کنیم:

public class MusicStoreDbInitializer : System.Data.Entity.DropCreateDatabaseAlways<MusicStoreDB>
{
protected override void Seed(MusicStoreDB context)
{
context.Artists.Add(new Artist { Name = "Al Di Meola" });
context.Genres.Add(new Genre { Name = "Jazz" });
context.Albums.Add(new Album {
Artist = new Artis { Name = "Rush" },
Genre = new Genre { Name = "Rock" },
Price = 9.99m,
Title = "Caravan"
});

base.Seed(context);
}
}


بعدش میایم تو فایل Global.asax.cs در متد Application_Start خط زیر رو اضافه می کنیم:



System.Data.Entity.Database.SetInitializer(new MusicStoreDbInitializer());


گیر من اینجاست که چرا کلاس رو از DropCreateDatabaseAlways مشتق می کنیم؟ چند نوع کلاس دیگه هم هست که تو پست قبلی گفتم. من تو کتابی که میخونم اینطور توضیح داده که هربار اپلیکیشن استارت میشه میاد دیتابیس رو پاک می کنه و از اول می سازه!!!!! خب چه کاریه اصلا چه نیازی به این کار هست؟!

متی کتابی که می خونم:



An easy way to keep the database in sync with changes to your model is to allow the Entity Framework to re-create an existing database. You can tell EF to re-create the database every time an application starts, or you can tell EF to re-create the database only when it detects a change in the model. You choose one of these two strategies when calling the static SetInitializer method of EF’s Database class (from the System.Data.Entity namespace). When you call SetInitializer you need to pass in an IDatabaseInitializer object, and two are provided with the framework: DropCreateDatabaseAlways and DropCreateDatabaseIfModelChanges. You can tell by the names of the classes which strategy each class represents. Both initializers require a generic type parameter, and the parameter must be a DbContext derived classYou might be wondering why anyone would want to re-create a database from scratch every time an application restarts. Even when the model changes, don’t you want to preserve the data inside? These questions are valid, and you’ll have to remember that features in the code-fi rst approach (like the database initializer) facilitate the iterative and fast-changing phases early in the application life cycle. Before you push your site live and take real customer data, you’ll want to use migrations to keep your EF code-fi rst models and their backing database in sync. Migrations allow you to preserve existing data in your database as you build and refi ne your model defi nitions. In the initial phase of a project you might want to have a new database populated with some initial records, such as lookup values. You can do this by seeding the database.

می دونم پست طولانی شد ولی میشه یه توضیح بدین؟
ممنون میشم

abdullah20
شنبه 26 دی 1394, 08:53 صبح
خب اون کتابی که میگید داره اموزش میده و از اول داره روش های مختلف را بررسی میکنه
ولی در نرم افزار واقعی اینطور نیست