جهت تعیین مسیر فایل بانک اطلاعاتی برنامه در رشتههای اتصالی، عموما توصیه میشود که از |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| و مسیر پس از آن باید یک مسیر کامل را تشکیل دهند.