- میشود به ازای هر سال یک Context مجزا با Entityهای مجزا درست کرد. فایل مثالی که با دو Context کار میکند در نظرات همان مطلب
«استفاده از چندین Context در EF 6 Code first»
پیوست شدهاست: Sample25.cs
ولی این روش سبب خواهد شد مجبور شوید به ازای هر سال، کوئریهای LINQ مختلفی را هم بنویسید. یعنی لایه سرویس برنامه را باید هربار بازنویسی کنید، فقط برای اینکه نمیخواهید ساختار بانک اطلاعاتی را به روز کنید. چرا؟
- EF با استفاده از امکانات Migration به سادگی ساختار بانکهای اطلاعاتی را به صورت خودکار میتواند به روز کند. باید هم اینکار را انجام بدهید چون کوئریهای مختلف LINQ شما نهایتا به SQL ترجمه شده و چون یک سری از فیلدها در بانک اطلاعاتی سال قبل حضور ندارند، عملا برنامه کار نخواهد کرد. یعنی قسمت عمدهای از برنامه شما (کل لایه سرویس) از کار میافتد. کامپایل شدن برنامه در این حالت مهم نیست. آیا مثلا تنها کوئری GetAll ایی که تهیه شده، بر روی تمام سالها و با ساختارهای مختلف اجرا میشود؟ خیر.
- سپس برای کار با بانکهای اطلاعاتی دارای یک ساختار و مربوط به سالهای مختلف، امکان تعیین رشته اتصالی به ازای هر Context هست:
ولی این روش سبب خواهد شد مجبور شوید به ازای هر سال، کوئریهای LINQ مختلفی را هم بنویسید. یعنی لایه سرویس برنامه را باید هربار بازنویسی کنید، فقط برای اینکه نمیخواهید ساختار بانک اطلاعاتی را به روز کنید. چرا؟
- EF با استفاده از امکانات Migration به سادگی ساختار بانکهای اطلاعاتی را به صورت خودکار میتواند به روز کند. باید هم اینکار را انجام بدهید چون کوئریهای مختلف LINQ شما نهایتا به SQL ترجمه شده و چون یک سری از فیلدها در بانک اطلاعاتی سال قبل حضور ندارند، عملا برنامه کار نخواهد کرد. یعنی قسمت عمدهای از برنامه شما (کل لایه سرویس) از کار میافتد. کامپایل شدن برنامه در این حالت مهم نیست. آیا مثلا تنها کوئری GetAll ایی که تهیه شده، بر روی تمام سالها و با ساختارهای مختلف اجرا میشود؟ خیر.
- سپس برای کار با بانکهای اطلاعاتی دارای یک ساختار و مربوط به سالهای مختلف، امکان تعیین رشته اتصالی به ازای هر Context هست:
context.Database.Connection.ConnectionString = "...";