یکی از مواردی که در EF Code First سبب سردرگمی تازهکاران میشود (بارها در کامنتهای سایت مطرح شده)، فراخوانی متد Database.SetInitializer و ... عدم تشکیل بانک اطلاعاتی در این لحظه است. تنها کاری که توسط متد Database.SetInitializer صورت میگیرد، مشخص سازی استراتژی نحوه آغاز بانک اطلاعاتی است و نه اجرای آن استراتژی.
این اجرا تا زمانیکه اولین کوئری به بانک اطلاعاتی ارسال نشود مثلا فراخوانی context.Entity.Find، به تعویق خواهد افتاد. به همین جهت برای وادار کردن EF به ساخت بانک اطلاعاتی و یا اعمال تغییرات جدید به آن، میتوان از نکته زیر استفاده کرد:
در اینجا در روال آغاز برنامه و پیش از اینکه رابط کاربری نمایان شود، توسط متد context.Database.Initialize، سبب اجرای اجباری استراتژی آغاز بانک اطلاعاتی خواهیم شد.
این اجرا تا زمانیکه اولین کوئری به بانک اطلاعاتی ارسال نشود مثلا فراخوانی context.Entity.Find، به تعویق خواهد افتاد. به همین جهت برای وادار کردن EF به ساخت بانک اطلاعاتی و یا اعمال تغییرات جدید به آن، میتوان از نکته زیر استفاده کرد:
protected void Application_Start() { //... Database.SetInitializer(...همانند سابق...); using (var context = new MyContext()) { context.Database.Initialize(force: true); } //... }