- در SQL Server قابلیتی به نام Linked servers وجود دارد که توسط آن در یک شبکه داخلی میشود چندین بانک اطلاعاتی SQL Server را در نودهای مختلف شبکه به هم متصل کرد و با آنها یکپارچه و مانند یک دیتابیس واحد کار کرد. این مورد در برنامههای سازمانی خیلی مرسوم است. قرار نیست به ازای هر برنامهای که برای یک سازمان نوشته میشود، هر کدام جداگانه بانک اطلاعاتی کاربران و لاگین خاص خودشان را داشته باشند. عموما یک دیتابیس مرکزی مثلا مدیریت منابع انسانی وجود دارد که مابقی برنامهها را تغذیه میکند. حتی میشود به یک بانک اطلاعاتی MySQL هم متصل شد (
^).
- ORMها صرفا کارهایی را قادر به انجام هستند که بانک اطلاعاتی مورد استفاده پشتیبانی میکند. برای نمونه در SQL Server امکان تهیه رابطه بین دو جدول از دو بانک اطلاعاتی مختلف
وجود ندارد. منظور مثلا ایجاد کلید خارجی بین جداول دو بانک اطلاعاتی مختلف است و نه نوشتن کوئری بین آنها که از این لحاظ مشکلی نیست.
A FOREIGN KEY constraint can reference columns in tables in the same database or within the same table
- هدف از پشتیبانی چند Context در EF 6، تلفیق اینها با هم در قالب یک بانک اطلاعاتی است (مطلب فوق).
- همچنین در EF 6 میتوان چندین Context را به چندین بانک اطلاعاتی مختلف با رشتههای اتصالی متفاوت، انتساب داد. مباحث آغاز بانکهای اطلاعاتی هر کدام جداگانه عمل کرده و مستقل از هم عمل میکنند.
یک مثال جهت اجرا و آزمایش:
Sample25.cs
- اگر میخواهید به انعطاف پذیری Linked servers برسید (مثلا در طی یک کوئری و نه چند کوئری از جداول دو بانک اطلاعاتی مختلف در دو سرور متفاوت کوئری بگیرید)، نیاز خواهید داشت مثلا View یا SP تهیه کنید و سپس اینها را در برنامه مورد استفاده قرار دهید. Viewها با استفاده از T-SQL میتوانند کوئری واحدی از چند بانک اطلاعاتی تهیه کنند. اینبار برنامه هم نهایتا به یک بانک اطلاعاتی متصل میشود و برای آن اهمیتی ندارد که View یا SP به چه نحوی تهیه شده و با چند بانک اطلاعاتی کار میکند.
- تراکنشهای توزیع شده هم نیاز به تنظیمات خاصی در SQL Server دارند و باید MSDTC راه اندازی و تنظیم شود: (
^). در غیراینصورت پیام خطای The underlying provider failed on Open. MSDTC on server is unavailable را دریافت خواهید کرد. بعد از آن باید از TransactionScope برای کار همزمان با چند Context استفاده کنید.