عنوان:

‫نحوه‌ی پردازش |DataDirectory| در Entity framework


نویسنده: وحید نصیری
تاریخ: ۱۳۹۳/۰۸/۰۵ ۰:۵
آدرس: www.dntips.ir
جهت تعیین مسیر فایل بانک اطلاعاتی برنامه در رشته‌های اتصالی، عموما توصیه می‌شود که از |DataDirectory| استفاده شود. برای مثال:
 AttachDBFilename=|DataDirectory|\database.mdf
اما ... این |DataDirectory| دقیقا چگونه محاسبه می‌شود؟
اگر به سورس EF مراجعه کنیم، متد DbProviderServices.ExpandDataDirectory پیاده سازی مرتبط را به همراه دارد:
 // find the replacement path
var rootFolderObject = AppDomain.CurrentDomain.GetData("DataDirectory");
به این معنا که DataDirectory می‌تواند یکی از ثوابت AppDomain جاری باشد و مسیر جایگزین آن به این نحو محاسبه و تعیین می‌گردد.


مقدار DataDirectory در برنامه‌های وب

در برنامه‌های ASP.NET مقدار DataDirectory یک AppDomain از پیش تعیین شده‌است و دقیقا به مسیر کامل پوشه‌ی استاندارد App_Data ختم می‌شود.


مقدار DataDirectory در برنامه‌های دسکتاپ

در برنامه‌های غیر وب، مقدار DataDirectory یک AppDomain تعیین نشده و نال است. برای رفع این مشکل کافی است در آغاز برنامه، DataDirectory را برای مثال به نحو زیر مقدار دهی کرد:
 AppDomain.CurrentDomain.SetData("DataDirectory", AppDomain.CurrentDomain.BaseDirectory);

چند نکته‌ی تکمیلی
با مطالعه‌ی سورس EF می‌توان دریافت که:
- پس از |DataDirectory| تنها یک \ باید قرار گیرد.
- اگر مسیر ذکر شده پس از |DataDirectory| یک مسیر نسبی مانند \.. باشد، مورد قبول واقع نشده و یک استثناء صادر می‌شود. جمع  |DataDirectory| و مسیر پس از آن باید یک مسیر کامل را تشکیل دهند.