#EntityFramework #CodeFirst #EFCore
این روزها با نزدیک شدن به زمان انتشار نسخه های نهایی ASP .NET Core 1.0 و EF Core 1.0 و نیز با توجه به تغییرات بنیادی که در ساختار آنها شکل گرفته، ترسی از بابت عدم پشتیبانی از برخی ویژگی های نسخ قبلی، همانند ویژگی Database First در EF Core، در بین توسعه دهندگان ایجاد شده است. در ادامه به تشریح معنای واقعی Code First بودن EF Core و نیز نگرانی بی مورد برخی توسعه دهندگان خواهیم پرداخت.
در ابتدا باید بدانیم مفهوم CodeFirst بودن در EF Core چیست؟ آیا با توجه به عدم پشتیبانی از مدل Database First دیگر نمیتوان از یک دیتابیس موجود و آماده استفاده کرد؟ در پاسخ باید بگوییم خیر این طور نیست. این نسخه، مدل Database First را به مفهموم استفاده از فایل EDMX که یک مدل designer-based است پشتبانی نمیکند و این روش از طرف مایکروسافت منسوخ شده است، اما به هیچ وجه به این مفهوم نیست که نمیشود Database First کار کرد! شما در EF Core 1.0 میتوانید از طریق reverse-engineer، کلاس های POCO و DbContext و Mapping ها را برای دیتابیس خودایجاد کنید و در ادامه Code First کار کنید. حتی برای این منظور و راحتی کار توسعه دهندگان، ابزارهای زیادی به صورت Extension برای ویژوال استودیو در نظر گرفته شده است که از معروف ترین آنها میتوان به EF Power Tools و EntityFramework Reverse POCO Code First Generator اشاره کرد. شاید هم به همین خاطر است که به جای اصلاح Code First که کمی گیج کننده است، اصطلاح Code base یا Code only را برای آن مناسب تر دانسته اند.
مطالب تکمیلی در این باره را میتوانید از طریق لینک زیر، که توسط خانم Julie Lerman و بسیار ساده و روان نوشته شده، مطالعه بفرمایید.
https://msdn.microsoft.com/en-us/magazine/dn890367.aspx
این روزها با نزدیک شدن به زمان انتشار نسخه های نهایی ASP .NET Core 1.0 و EF Core 1.0 و نیز با توجه به تغییرات بنیادی که در ساختار آنها شکل گرفته، ترسی از بابت عدم پشتیبانی از برخی ویژگی های نسخ قبلی، همانند ویژگی Database First در EF Core، در بین توسعه دهندگان ایجاد شده است. در ادامه به تشریح معنای واقعی Code First بودن EF Core و نیز نگرانی بی مورد برخی توسعه دهندگان خواهیم پرداخت.
در ابتدا باید بدانیم مفهوم CodeFirst بودن در EF Core چیست؟ آیا با توجه به عدم پشتیبانی از مدل Database First دیگر نمیتوان از یک دیتابیس موجود و آماده استفاده کرد؟ در پاسخ باید بگوییم خیر این طور نیست. این نسخه، مدل Database First را به مفهموم استفاده از فایل EDMX که یک مدل designer-based است پشتبانی نمیکند و این روش از طرف مایکروسافت منسوخ شده است، اما به هیچ وجه به این مفهوم نیست که نمیشود Database First کار کرد! شما در EF Core 1.0 میتوانید از طریق reverse-engineer، کلاس های POCO و DbContext و Mapping ها را برای دیتابیس خودایجاد کنید و در ادامه Code First کار کنید. حتی برای این منظور و راحتی کار توسعه دهندگان، ابزارهای زیادی به صورت Extension برای ویژوال استودیو در نظر گرفته شده است که از معروف ترین آنها میتوان به EF Power Tools و EntityFramework Reverse POCO Code First Generator اشاره کرد. شاید هم به همین خاطر است که به جای اصلاح Code First که کمی گیج کننده است، اصطلاح Code base یا Code only را برای آن مناسب تر دانسته اند.
مطالب تکمیلی در این باره را میتوانید از طریق لینک زیر، که توسط خانم Julie Lerman و بسیار ساده و روان نوشته شده، مطالعه بفرمایید.
https://msdn.microsoft.com/en-us/magazine/dn890367.aspx
#EntityFramework, #CodeFirst, #Relation
رفع مشکل کلید خارجی در EntityFramework CodeFirst به هنگام ایجاد Relation
توی Entity Framework Code First وقتی از Navigation Property ها استفاده میکنین در واقع ef میفهمه که یک Relation بر قرار کردید. و خودش فیلدی برای Foreingkey با نام زیر در جدول اضافه میکنه
yourfield_ID
حال اگر خودتون به صورت دستی خصوصتی در کلاس مورد نظر به عنوان کلید خارجی تعریف کردید. حتما باید برای EF مخشص کنید که این Property همان Foreignkey مربوط به Relation شماست تا دیگر خود EF فیلدی را به عنوان Foriegnkey در جدول اضافه نکند
برای مشخص کردن کلید خارجی در EF 2 راه دارید.
1- استفاده از ForeignKey Attribute مثال :
public class Books
{
public int CategoryId { get; set; } //Foreign key
[ForeignKey("CategoryId")]
public Category Category { get; set; }
}
2- استفاده از Fluetn Api مثال :
modelBuilder.Entity<Book> ()
.HasRequired(p => p.Category)
.WithMany(p => p.Books)
.HasForeignKey(p => p.CategoryId);
نکته اینکه کد های fluent api باید در متد OnModelCreating نوشته شود.
@IranAspMvc
رفع مشکل کلید خارجی در EntityFramework CodeFirst به هنگام ایجاد Relation
توی Entity Framework Code First وقتی از Navigation Property ها استفاده میکنین در واقع ef میفهمه که یک Relation بر قرار کردید. و خودش فیلدی برای Foreingkey با نام زیر در جدول اضافه میکنه
yourfield_ID
حال اگر خودتون به صورت دستی خصوصتی در کلاس مورد نظر به عنوان کلید خارجی تعریف کردید. حتما باید برای EF مخشص کنید که این Property همان Foreignkey مربوط به Relation شماست تا دیگر خود EF فیلدی را به عنوان Foriegnkey در جدول اضافه نکند
برای مشخص کردن کلید خارجی در EF 2 راه دارید.
1- استفاده از ForeignKey Attribute مثال :
public class Books
{
public int CategoryId { get; set; } //Foreign key
[ForeignKey("CategoryId")]
public Category Category { get; set; }
}
2- استفاده از Fluetn Api مثال :
modelBuilder.Entity<Book> ()
.HasRequired(p => p.Category)
.WithMany(p => p.Books)
.HasForeignKey(p => p.CategoryId);
نکته اینکه کد های fluent api باید در متد OnModelCreating نوشته شود.
@IranAspMvc
#AspMvc, #EntityFramework, #CodeFirst, #Project, #Sample, #Source,
سورس چندین پروژه مختلف که با Asp Mvc و EF و ... نوشته شده در زیر هست.
مرور کد هاش رو به همه پیشنهاد میدم. خیلی مفیده و میتونه بهتون ایده بده
سورس پروژه فروشگاه اینترنتی با AspMVC - EF CodeFirst
http://www.dotnettips.info/projects/details/22
https://github.com/rabbal/My-Golden-City-Shop
طراحی فریمورک برای کار با Asp.net MVC و EF به صورت NTier
http://www.dotnettips.info/projects/details/23
https://github.com/rabbal/Mvc5
سورس پروژه سیستم مدیریت سوابق آموزشی با Asp Mvc
http://www.dotnettips.info/projects/details/27
https://github.com/rabbal/Decision
سورس پروژه سامانه برگزاری مسابقات ورزشی با ASP.NET MVC و AngularJS
http://www.dotnettips.info/projects/details/26
https://github.com/MehdiSaeedifar/SportsSystem
سورس سیستم مدیریت محتوای IRIS
http://www.dotnettips.info/projects/details/13
https://github.com/MehdiSaeedifar/iriscms
سورس پروژه فروشگاه اینترنتی (الکترونیک) با معماری سه لایه
http://www.dotnettips.info/projects/details/2
@IranAspMvc
سورس چندین پروژه مختلف که با Asp Mvc و EF و ... نوشته شده در زیر هست.
مرور کد هاش رو به همه پیشنهاد میدم. خیلی مفیده و میتونه بهتون ایده بده
سورس پروژه فروشگاه اینترنتی با AspMVC - EF CodeFirst
http://www.dotnettips.info/projects/details/22
https://github.com/rabbal/My-Golden-City-Shop
طراحی فریمورک برای کار با Asp.net MVC و EF به صورت NTier
http://www.dotnettips.info/projects/details/23
https://github.com/rabbal/Mvc5
سورس پروژه سیستم مدیریت سوابق آموزشی با Asp Mvc
http://www.dotnettips.info/projects/details/27
https://github.com/rabbal/Decision
سورس پروژه سامانه برگزاری مسابقات ورزشی با ASP.NET MVC و AngularJS
http://www.dotnettips.info/projects/details/26
https://github.com/MehdiSaeedifar/SportsSystem
سورس سیستم مدیریت محتوای IRIS
http://www.dotnettips.info/projects/details/13
https://github.com/MehdiSaeedifar/iriscms
سورس پروژه فروشگاه اینترنتی (الکترونیک) با معماری سه لایه
http://www.dotnettips.info/projects/details/2
@IranAspMvc
#EntityFramework, #CodeFirst, #POCO_Generator
https://goo.gl/w9ylrU
ساخت کلاس های #CodeFirst از روی دیتابیس
افزونه ی EntityFramework Reverse POCO Generator کارش اینه که از روی دیتابیس شما کلاس های Code Frist Poco رو میسازه
به همراه تمام Data Annoutation ها و Configuration Mapping ها
و به درد کسایی میخوره که میخوان دیتابیس آماده شون رو به صورت CodeFrist به یک پروژه متصل کنند.
این افزونه از سال 2013 وجود داشته ولی چیزی که باعث توجه بیشتر و درخشش تو این روزا شده، خبر امدن EF7 و اینکه دیگه از Database First پشتیبانی نمی کنه هست
پس اگه میخواین از EF7 داخل پروژه ای استفاده کنین که دیتابیسش از قبل آماده شده، نگران نباشید
براحتی و در عرض چندثانیه میتونین تمام کلاس های Codefirst اون رو به همراه تمام مشخصات بسازید و توی پروژتون استفاده کنین
این افزونه برای ویژوال استادیو رایگان بوده و در لینک زیر قابل دسترس است
https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838
همچنین سورس کامل آن در گیت هاب در لینک زیر موجود است
https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generato
@IranAspMvc
https://goo.gl/w9ylrU
ساخت کلاس های #CodeFirst از روی دیتابیس
افزونه ی EntityFramework Reverse POCO Generator کارش اینه که از روی دیتابیس شما کلاس های Code Frist Poco رو میسازه
به همراه تمام Data Annoutation ها و Configuration Mapping ها
و به درد کسایی میخوره که میخوان دیتابیس آماده شون رو به صورت CodeFrist به یک پروژه متصل کنند.
این افزونه از سال 2013 وجود داشته ولی چیزی که باعث توجه بیشتر و درخشش تو این روزا شده، خبر امدن EF7 و اینکه دیگه از Database First پشتیبانی نمی کنه هست
پس اگه میخواین از EF7 داخل پروژه ای استفاده کنین که دیتابیسش از قبل آماده شده، نگران نباشید
براحتی و در عرض چندثانیه میتونین تمام کلاس های Codefirst اون رو به همراه تمام مشخصات بسازید و توی پروژتون استفاده کنین
این افزونه برای ویژوال استادیو رایگان بوده و در لینک زیر قابل دسترس است
https://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838
همچنین سورس کامل آن در گیت هاب در لینک زیر موجود است
https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generato
@IranAspMvc