تغییر مهم تعریف رشته‌های اتصالی SQL Server در EF Core 7.0
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

اگر برنامه‌های مبتنی بر SQL Server خود را به EF 7.0 ارتقاء دهید، در حین اجرای برنامه، به خطای زیر برخواهید خورد:
A connection was successfully established with the server, but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
علت اینجا است که پروایدر SQL Server مخصوص EF 7.0، از نگارش جدید Microsoft.Data.SqlClient استفاده می‌کند و در این نگارش، تنظیم Encrypt=True، به صورت پیش‌فرض اعمال شده‌است. این تنظیم، پیشتر به صورت Encrypt=False وجود داشت و به همین جهت عموما در حین تعریف رشته‌های اتصالی دیده نمی‌شد.

اگر نیاز به استفاده‌ی از پرچم Encrypt=True وجود داشته باشد:
- باید سرور اس کیوال با یک certificate معتبر تنظیم شود.
- کلاینت باید این certificate را تائید کند. اگر کلاینت چنین قصدی را ندارد، می‌تواند تنظیم TrustServerCertificate=True را به رشته‌ی اتصالی اضافه کند.
در غیراینصورت، خطای ذکر شده را دریافت خواهیم کرد.

برای رفع این مشکل یا باید رمزنگاری اتصالات را در SQL Server پیاده سازی کرد و یا از این پس، ذکر پرچم Encrypt=False در انتهای رشته‌ی اتصالی به آن، ضروری است. برای مثال یک نمونه رشته‌ی اتصالی تغییر یافته‌ی بر اساس این تنظیم، به صورت زیر است:
Data Source=.\\SQLEXPRESS;Initial Catalog=MyTestDb;Integrated Security=true;Encrypt=False;

بدیهی است این تغییر مختص به EF 7.0 نیست و تمام برنامه‌هایی که از ADO.NET و نگارش جدید Microsoft.Data.SqlClient استفاده می‌کنند، باید به آن توجه داشته باشند.
  • #
    ‫۱ سال و ۸ ماه قبل، پنجشنبه ۲۴ آذر ۱۴۰۱، ساعت ۱۷:۴۴
    ما برای رفع این مورد از TrustServerCertificate=true هم استفاده کردیم.
  • #
    ‫۱ سال و ۸ ماه قبل، پنجشنبه ۲۴ آذر ۱۴۰۱، ساعت ۲۰:۲۴
    بله در برنامه هایی که هنوز به .net 7 ارتقا داده نشده اند نیز رخ میدهد.
    البته فقط در متد هایی باعث خطا خواهد شد که به نحوی از system.data.sqlclient استفاده کرده اند (مانند context.database.(executeRawSql و سایر کد‌ها که با ef core و linq نوشته شده، خطایی تولید نخواهند کرد.
    • #
      ‫۱ سال و ۸ ماه قبل، پنجشنبه ۲۴ آذر ۱۴۰۱، ساعت ۲۲:۲۸
      EF Core 6x از نگارش 2.1.4 بسته‌ی Microsoft.Data.SqlClient استفاده می‌کند و EF 7.0 از نگارش 5.0.1. تنظیم پیش‌فرض Encrypt=True، از نگارش 4 بسته‌ی SqlClient اتفاق افتاده.