بسمهتعالی
در ادامه مقاله قبل که دلایل خودم را برای مهاجرت از asp.net به asp.net core بیان کردم، لازم میدانم کمی در مورد سختیها و گلوگاههای پروژه صحبت کنم. چون بسیاری از ما در زندگی روزمره با سختی که روبهرو میشویم انگیزه خود را از دست خواهیم داد و شکست را خواهیم پذیرفت. پس بدون مقدمه به چالشهای این مهاجرت میپردازیم.
1- چهچیزهایی بهروز شدهاند.
بستگی به پروژه فعلی شما دارد و این که از چه ابزارهایی استفاده کرده باشید. در پروژه من موارد زیر به روز شدهاند.
الف) EntityFrameWork
بسیاری از ویژگیهای EntityFrameWork به EntityFrameWork Core منتقل شدهاست (هرکجا تغییراتی صورت گرفته واقعاً کار سادهتر و بهتر شدهاست) به عنوان مثال ویژگی Index که من در پروژه خودم برای بررسی یکتایی مقدار یک فیلد به جز کلید استفاده میکردم حذف شدهاست. یا دستور بسیار پُرکاربرد ThenInclude برای واکشی تودرتوی جداول با استفاده از ارتباطات بین Entityها اضافه شدهاست. من حدود ۳۰ جدول درون پایگاهداده دارم و نزدیک ۲ روز برای مهاجرت و اصلاح تغییرات زمان صرف کردم.
ب) Identity
اگر در پروژه خود از این ویژگی برای مدیریت کاربران و نقشها استفاده میکنید باید بدانید که هم ساختار جداول و هم ويژگیهای توسعهپذیر آن تغییر کردهاست. برای انتقال دادههای خود از پایگاه داده قدیمی به پایگاه داده بروزرسانی شده میتوانید از ویژگی Generate Script در Sql Server Management Studio استفاده کنید. باید مد نظر داشتهباشید که باید بعضی از ستونهای جدول User را حذف کنید. همچنین تمامی جداول اعم از User و Role و … ستون جدید Normalize را دارند که تمامی دستورات با این ستون در ارتباط است، پس باید کوئری بنویسید که تمام نامهای کاربری و یا نام نقشهای را به صورت Capital در ستون Normalize بنویسید.
ویژگی دیگری که در این بخش بروزرسانی شدهاست پسورد میباشد. الگوریتم جدیدی برای Hash پسورد استفاده شدهاست. شما در اینجا دو کار میتوانید بکنید اول اینکه صفحه بروزرسانی پسورد را برای تمام اعضای خود به صورت اجباری نشان دهید و از کاربر بخواهید پسورد جدیدی وارد کند و با الگوریتم جدید Hash را انجام دهید و در پایگاه داده ذخیره کنید و یا در شیوه دوم با override کردن کلاس PasswordHasher در برنامه خود به صورت هوشمند الگوریتم مورد نظر را اجرا کنید. مطمئناً اجرای شیوه اول امنیت سیستم شما را بالاتر خواهد برد.
ج) حذف تابع OnAuthorized از Controller
در پروژه من لازم بود که بعد احراز هویت کاربر یکسری پارامترها مقداردهی شوند که این کار در تابع OnAuthorized در هر Controller به صورت مجزا صورت میگرفت. اما در asp.net core این تابع حذف شدهاست و من مجبور شدم که به صورت کلی این بخش از برنامهام را تغییر دهم ( راستش روش اصولی برای انجام این کار هنوز پیدا نکردم).
د) حذف ویژگی Html.Action در View
در Asp.net Mvc اگر میخواستید که یک قسمت از View را با فراخوانی یک Action در یک Controller دیگر با استفاده از Partial بسازید باید از Html.Action استفاده میکردید. این ویژگی بسیار پُرکاربرد حذف شدهاست و باید از ویژگی جدیدی به نام Component به جای آن استفاده کنید.