معرفی
در مقالات قبلی ( رویکرد دسترسی به داده ها ، رویکرد اول کد و WebAPI ) چیزهای زیادی در مورد Entity Framework و پیاده سازی های عملی آن آموختیم. هدف این مقاله توضیح مفهوم Entity Framework core است. ما گام به گام به بررسی موضوع Entity Framework هسته خواهیم پرداخت. ما اولین رویکرد کد را با استفاده از EF Core بررسی خواهیم کرد و همچنین در مورد حاشیه نویسی داده ها نیز یاد خواهیم گرفت. ما همچنین در این مقاله اولین مهاجرت های کد را همراه با درک چگونگی ایجاد پایگاه داده را پوشش خواهیم داد. من از ویژوال استودیو 2017 برای آموزش استفاده خواهم کرد. برای پایگاه داده، ما از SQL Server استفاده می کنیم. اگر سرور SQL را نصب نکرده اید، می توانید از دسی بل محلی استفاده کنید.
اطلاعات سری
ما یک سری پنج مقاله را دنبال خواهیم کرد تا موضوع Entity Framework را به طور مفصل یاد بگیریم. تمام مقالات به صورت آموزشی خواهند بود به جز آخرین مقاله که در آن تئوری، تاریخچه، استفاده از Entity Framework را پوشش خواهم داد. در ادامه موضوعات این سریال آمده است.
- Framework موجودیت یادگیری (روز 1): رویکردهای دسترسی به داده ها از Entity Framework در دات نت
- Framework موجودیت یادگیری (روز 2): Code First Migrations در Entity Framework در دات نت
- Learning Entity Framework (روز 3): NET Web API 2 با Entity Framework 6 Code First Migrations
- Framework موجودیت یادگیری (روز 4): رویکرد اول کد با استفاده از Entity Framework Core در دات نت
- چارچوب موجودیت یادگیری (روز پنجم): چارچوب موجودیت (تئوری)
هسته چارچوب نهاد
EF Core نیز یک ORM است، اما ارتقاء داده شده به Entity Framework 6 نیست و نباید آن را چنین در نظر گرفت. درعوض، Entity Framework Core یک نسخه سبک، قابل توسعه و چند پلتفرمی از Entity Framework است. بنابراین، با مجموعه ای از ویژگی ها و پیشرفت های جدید نسبت به Entity Framework 6 ارائه می شود، و در حال حاضر در نسخه 2 است. برای ASP.NET Core 1، نسخه 1 باید استفاده شود، و برای ASP.NET Core 2، نسخه 2 توصیه می شود. Entity Framework از همه ویژگیهای Entity Framework 6 پشتیبانی نمیکند. Entity Framework Core برای برنامههای جدیدی که به مجموعه سنگین ویژگیهایی که Entity Framework 6 ارائه میدهد، یا برای برنامههایی که .NET Core را هدف قرار میدهند توصیه میشود. با مجموعه ای از ارائه دهندگان ارائه می شود که می توانند با انواع پایگاه های داده استفاده شوند. البته می توان آن را با مایکروسافت SQL Server استفاده کرد، اما همچنین با SQLite، Postgre، SQL Server Compact Edition، MySQL و IBM DB2. و همچنین یک ارائه دهنده در حافظه برای اهداف آزمایشی وجود دارد. EF Core را می توان هم برای رویکرد کد اول استفاده کرد، که پایگاه داده را از کد ایجاد می کند، یا برای رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. و IBM DB2. و همچنین یک ارائه دهنده در حافظه برای اهداف آزمایشی وجود دارد. EF Core را می توان هم برای رویکرد کد اول استفاده کرد، که پایگاه داده را از کد ایجاد می کند، یا برای رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. و IBM DB2. و همچنین یک ارائه دهنده در حافظه برای اهداف آزمایشی وجود دارد. EF Core را می توان هم برای رویکرد کد اول استفاده کرد، که پایگاه داده را از کد ایجاد می کند، یا برای رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. و همچنین یک ارائه دهنده در حافظه برای اهداف آزمایشی وجود دارد. EF Core را می توان هم برای رویکرد کد اول استفاده کرد، که پایگاه داده را از کد ایجاد می کند، یا برای رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. و همچنین یک ارائه دهنده در حافظه برای اهداف آزمایشی وجود دارد. EF Core را می توان هم برای رویکرد کد اول استفاده کرد، که پایگاه داده را از کد ایجاد می کند، یا برای رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. که پایگاه داده را از کد ایجاد می کند، یا یک رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. که پایگاه داده را از کد ایجاد می کند، یا یک رویکرد اول پایگاه داده، که اگر پایگاه داده از قبل وجود داشته باشد، راحت است. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. بخش زیر پیاده سازی اساسی Entity Framework Core را در یک برنامه کنسول نشان می دهد و البته، می تواند در هر نوع برنامه دات نت مانند MVC، Web API، ویندوز که نیاز به تعامل با پایگاه داده دارد، استفاده شود. ما با افزودن یک EF Core به پروژه خود شروع می کنیم. ما همچنین مهاجرتها را بررسی خواهیم کرد، راهی برای مهاجرت بین نسخههای مختلف ذخیرهگاه دادههای زیربنایی ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. راهی برای مهاجرت بین نسخههای مختلف دادههای زیرین ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم. راهی برای مهاجرت بین نسخههای مختلف دادههای زیرین ما. ما همچنین بررسی خواهیم کرد که چگونه میتوانیم پایگاه داده را با دادههای کد ایجاد کنیم. بیایید با معرفی Entity Framework Core وارد آن شویم.
کجا می توان از EF Core استفاده کرد
Entity Framework Core روی NET Core اجرا میشود و NET Core در مکانهای زیادی اجرا میشود. در داخل فریم ورک کامل دات نت که هر نسخه 4.5.1 یا جدیدتر باشد اجرا می شود، و خود .NET Core می تواند بر روی CoreCLR اجرا شود، این زمان اجرا است، و CoreCLR می تواند به صورت بومی، نه تنها در ویندوز بلکه در مک نیز اجرا شود. و لینوکس. و مکان دیگری که میتوانید از EF Core در پلتفرم جهانی ویندوز یا UWP برای ویندوز 10 استفاده کنید، به طوری که بر روی هر دستگاه یا رایانهای که میتواند ویندوز 10 را اجرا کند اجرا میشود، اما این لزوماً به این معنا نیست که باید از Entity Framework Core در همه موارد استفاده کنید. از این سناریوها، و این نکته بسیار مهمی است که باید در نظر داشت، زیرا Entity Framework Core مجموعهای کاملاً جدید از APIها است، همه ویژگیهایی را که ممکن است با Entity Framework 6 به آنها عادت کرده باشید، ندارد، و در حالی که برخی از این ویژگیها در نسخههای بعدی EF Core خواهند آمد، تعدادی هستند که هرگز بخشی از Entity Framework Core نخواهند بود، بنابراین مهم است که آن را درک کنید، و ممکن است نخواهید هر پروژه جدید را با Entity Framework Core شروع کنید. اطمینان حاصل کنید که Entity Framework Core ویژگی های مورد نیاز شما را دارد. اگر میخواهید کراس پلتفرم یا UWP را هدف قرار دهید، باید از Entity Framework Core استفاده کنید، اما برای برنامههای داتنت، همچنان میتوانید از Entity Framework 6 و در واقع برای برنامههای ASP.NET Core که قطعا در ویندوز باقی میمانند، استفاده کنید. به عبارت دیگر در سرور ویندوز، همچنان میتوانید با استفاده از .NET کامل با Entity Framework 6 APIهای جداگانه بسازید، و فقط اجازه دهید برنامه ASP.NET Core با کتابخانه مبتنی بر Entity Framework 6 صحبت کند. و اینکه ممکن است نخواهید هر پروژه جدید را با Entity Framework Core شروع کنید. اطمینان حاصل کنید که Entity Framework Core ویژگی های مورد نیاز شما را دارد. اگر میخواهید کراس پلتفرم یا UWP را هدف قرار دهید، باید از Entity Framework Core استفاده کنید، اما برای برنامههای داتنت، همچنان میتوانید از Entity Framework 6 و در واقع برای برنامههای ASP.NET Core که قطعا در ویندوز باقی میمانند، استفاده کنید. به عبارت دیگر در سرور ویندوز، همچنان میتوانید با استفاده از .NET کامل با Entity Framework 6 APIهای جداگانه بسازید، و فقط اجازه دهید برنامه ASP.NET Core با کتابخانه مبتنی بر Entity Framework 6 صحبت کند. و اینکه ممکن است نخواهید هر پروژه جدید را با Entity Framework Core شروع کنید. اطمینان حاصل کنید که Entity Framework Core ویژگی های مورد نیاز شما را دارد. اگر میخواهید کراس پلتفرم یا UWP را هدف قرار دهید، باید از Entity Framework Core استفاده کنید، اما برای برنامههای داتنت، همچنان میتوانید از Entity Framework 6 و در واقع برای برنامههای ASP.NET Core که قطعا در ویندوز باقی میمانند، استفاده کنید. به عبارت دیگر در سرور ویندوز، همچنان میتوانید با استفاده از .NET کامل با Entity Framework 6 APIهای جداگانه بسازید، و فقط اجازه دهید برنامه ASP.NET Core با کتابخانه مبتنی بر Entity Framework 6 صحبت کند.
روش اول کد با استفاده از Entity Framework Core
رویکردهای دسترسی به داده جدا از برخی از ویژگی های جدیدی که EF Core ارائه می دهد، در Entity Framework 6 و Entity Framework Core یکسان است. تفاوتهای جزئی و تکنیکهای پیادهسازی همراه با بستههای مرتبط وجود دارد. بیایید EF Core را گام به گام با استفاده از رویکرد کد اول ببینیم. ما موضوعات بیشتری مانند حاشیه نویسی داده ها و سایر تکنیک های مهاجرت را در حین اجرای عملی پوشش خواهیم داد.
افزودن نهادها
- همانطور که توضیح داده شد، برای رویکرد کد اول، برنامه باید دارای موجودیت هایی باشد که در نهایت منجر به جداول پایگاه داده می شود. بنابراین، یک برنامه کنسول برای شروع در .NET Framework 4.6.2 ایجاد کنید. نام برنامه EmployeeManagement و نام راه حل را EFCore بگذارید.
- دو کلاس موجودیت یکی به نام Department و دیگری به عنوان Employee اضافه کنید. یک رابطه بیش از حد بین بخش و کارمند وجود دارد، یعنی یک بخش می تواند چندین کارمند داشته باشد و یک کارمند با هر بخش مرتبط باشد.
بخش
کد
- namespace EmployeeManagement
- {
- public class Department
- {
- public int DepartmentId { get; set; }
- public string DepartmentName { get; set; }
- public string DepartmentDescription { get; set; }
- }
- }
کارمند
کد
- namespace EmployeeManagement
- {
- public class Employee
- {
- public int EmployeeId { get; set; }
- public string EmployeeName { get; set; }
- public int DepartmentId { get; set; }
- public virtual Department Departments { get; set; }
- }
- }
- موجودیت بخش دارای نام بخش و ویژگی توضیحات است و کارمند نهاد دارای ویژگی EmployeeId، Name و DepartmentId است که به عنوان ویژگی ناوبری برای بخش ها عمل می کند. یک ویژگی اضافه کنید کارمندان مجموعه ای از کارمندان موجود در بخش را نشان می دهد زیرا این بخش می تواند کارمندان زیادی داشته باشد. به طور مشابه، یک ویژگی از نوع Department در کلاس Employee اضافه می شود که یک بخش واحد و نه لیست را برمی گرداند.
- public virtual ICollection < Employee > Employees {
- get;
- set;
- }
حاشیه نویسی داده ها
- با دادن شناسه به کلاس با نام Id، این فیلد به طور خودکار به عنوان کلید اصلی در نظر گرفته می شود. DepartmentId، به عنوان مثال، نام کلاس، به دنبال ID نیز ممکن است. اگر نام آن را به گونه ای دیگر نام گذاری کنیم، کنوانسیون اعمال نمی شود. اما می توانیم حاشیه نویسی داده های کلیدی را از System.ComponentModel.DataAnnotations اعمال کنیم. من شخصاً دوست دارم حاشیه نویسی کلید را به هر حال اعمال کنم، حتی اگر قرارداد تضمین کند که این ویژگی به عنوان کلید اصلی در نظر گرفته می شود، احساس می کنم که کلاس های Entity را در نگاه اول بسیار قابل درک تر می کند. اما، خوب، من با بسیاری از رویکردهای مبتنی بر قرارداد، همین مشکل را دارم، بنابراین این کاملاً به شما بستگی دارد. در زیر روشی وجود دارد که در آن میتوانید یک [Key] برای خاصیتی که میخواهید کلید اصلی ایجاد کنید، اضافه کنید.
- به طور مشابه، کلید EmployeeId را اضافه کنید، یعنی یک کلید اولیه برای موجودیت Employee.
- یکی دیگر از موارد مهم، تولید کلیدهای اولیه ID است. طبق قرارداد، کلیدهای اولیه که از نوع دادههای عدد صحیح یا GUID هستند به گونهای تنظیم میشوند که مقادیر آنها در هنگام افزودن تولید شود. به عبارت دیگر شناسه ما یک ستون هویت خواهد بود. برای بیان صریح این موضوع، می توانیم از حاشیه نویسی دیگری استفاده کنیم، حاشیه نویسی ایجاد شده توسط پایگاه داده از ComponentModel.DataAnnotations.SchemaNamespace. دارای سه مقدار ممکن است،
- پوچ برای هیچ نسلی،
- هویت برای نسل به اضافه،
- برای تولید در هنگام افزودن یا به روز رسانی محاسبه می شود.
ما به گزینه هویت نیاز داریم. هنگامی که یک کارمند اضافه می شود، یک کلید جدید ایجاد می شود. نحوه تولید این مقدار بستگی به ارائه دهنده پایگاه داده مورد استفاده دارد. ارائه دهندگان پایگاه داده ممکن است به طور خودکار تولید ارزش را برای برخی از انواع دارایی تنظیم کنند، در حالی که برخی دیگر از شما می خواهند که به صورت دستی نحوه تولید ارزش را تنظیم کنید. در مورد ما، ما از SQL Server استفاده خواهیم کرد. بنابراین، ما خوب هستیم که برویم. یک کلید اولیه عدد صحیح جدید به طور خودکار بدون راه اندازی بیشتر ایجاد می شود.
- ما می خواهیم ارتباط بین بخش و کارمند را نشان دهیم. اگر به نهاد دپارتمان نگاه کنیم، قبلاً مجموعهای از Employee را تعریف کردهایم، اما میخواهیم در نمودار شیء خود از نقطهای مورد علاقه به بخش اصلی حرکت کنیم. بنابراین، ما به یک ملک برای مراجعه به آن بخش مادر نیاز داریم. و باید بیان کنیم که ویژگی کلید خارجی چقدر خواهد بود. باز هم، یک رویکرد مبتنی بر قرارداد و یک رویکرد صریح امکان پذیر است. طبق قرارداد، زمانی که یک ویژگی ناوبری بر روی یک نوع کشف شود، یک رابطه ایجاد می شود. و یک خاصیت به عنوان یک ویژگی ناوبری در نظر گرفته می شود اگر نوع مورد نظر نتواند به عنوان یک نوع اسکالر توسط ارائه دهنده پایگاه داده فعلی نگاشت شود. بنابراین، اگر یک ویژگی Department از نوع Department اضافه کنیم، این ویژگی ناوبری در نظر گرفته می شود و یک رابطه ایجاد می شود. روابطی که طبق قرارداد کشف می شوند همیشه کلید اصلی مدیر را هدف قرار می دهند و در این مورد، این شناسه دپارتمان است. این کلید خارجی ما خواهد بود. نیازی به تعریف صریح این ویژگی کلید خارجی در کلاس وابسته نیست. و طبقه وابسته، خوب، این کلاس Employee ماست. اما توصیه می شود، بنابراین ما یکی را اضافه می کنیم. بنابراین این رویکرد مبتنی بر قرارداد است. اگر نمیخواهیم رویکرد مبتنی بر قرارداد دنبال شود، که بیان میکند که یک کلید خارجی با توجه به نام کلاس ویژگی ناوبری و سپس id نامگذاری میشود، بنابراین DepartmentId در مورد ما، میتوانیم دوباره از یک حاشیهنویسی برای آن استفاده کنیم. حاشیه نویسی کلید خارجی از فضای نام System.ComponentModel.DataAnnotations.Schema.
- خصوصیات کلاس های موجودیت هیچ گونه حاشیه نویسی داده ای اجباری یا حداکثر طول ندارند. اگر کلاسهای موجودیت خود را به این صورت رها کنیم، ستونهای پایگاه داده ما null را برای فیلدهایی که نباید null باشند اجازه میدهد. و ما به جای حداکثر اندازه خاص، از حداکثر و طول وارچار استفاده نمی کنیم. بهترین روش برای اطمینان از اعمال این محدودیت های میدانی در پایین ترین سطح ممکن است. بنابراین، در مورد ما، این خود پایگاه داده است. این بهترین یکپارچگی ممکن را تضمین می کند. بنابراین، بیایید این ویژگی ها را اعمال کنیم. برای Employee، EmployeeName با حداکثر طول 50 مورد نیاز بود. و برای نهاد Department، ما اینها را نیز میخواهیم. بیایید Name را با طول حداکثر 50 مورد نیاز قرار دهیم.
کد
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace EmployeeManagement
- {
- public class Employee
- {
- [Key]
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public int EmployeeId { get; set; }
- [Required]
- [MaxLength(50)]
- public string EmployeeName { get; set; }
- public int DepartmentId { get; set; }
- [ForeignKey("DepartmentId")]
- public virtual Department Department { get; set; }
- }
- }
افزودن متن DB