#DLL, #AspMvc, #Route
در پروژه های بزرگ و Enterprise برای جدا سازی و بخش بندی قسمت های مختلف پروژه معمولا کنترولر های پروژه رو در یک assembly جداگانه ایجاد میکنند.
برای اینکار باید ابتدا یک پروژه Class Library ایجاد کرده و تمام Controller هاتون رو به اونجا انتقال بدید (دقت داشته باشید که کلاس(Controller) ها باید از کلاس پایه System.Web.Mvc.Controller ارث بری کرده باشه)
سپس Reference این پروژه که خروجی آن یک DLL یا Assembly هست رو به پروژه Asp MVC خودتون اضافه کنید.
حالا فقط کافیه تنظیماتی رو توی RouteConfig پروژه انجام بدین تا پروژه Mvc بتواند کنترولر های پروژه دیگر را مدیریت کند.
کد آن در تصویر پست بعد میباشد
@IranAspMvc
در پروژه های بزرگ و Enterprise برای جدا سازی و بخش بندی قسمت های مختلف پروژه معمولا کنترولر های پروژه رو در یک assembly جداگانه ایجاد میکنند.
برای اینکار باید ابتدا یک پروژه Class Library ایجاد کرده و تمام Controller هاتون رو به اونجا انتقال بدید (دقت داشته باشید که کلاس(Controller) ها باید از کلاس پایه System.Web.Mvc.Controller ارث بری کرده باشه)
سپس Reference این پروژه که خروجی آن یک DLL یا Assembly هست رو به پروژه Asp MVC خودتون اضافه کنید.
حالا فقط کافیه تنظیماتی رو توی RouteConfig پروژه انجام بدین تا پروژه Mvc بتواند کنترولر های پروژه دیگر را مدیریت کند.
کد آن در تصویر پست بعد میباشد
@IranAspMvc
#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 , #ChangeTracking
وقتی از EF استفاده میکنید. مثلا چیزی Add یا Edit میکنید. EF برای اینکه این تغییرات رو در سمت دیتابیس ذخیره کنه. اول باید بفهمه که چه تغییراتی رخ داده؟! مثلا ایا چیزی Add شده ؟ یا فیلدی ویرایش شده؟ یا شاید شی ای حذف شده. و یا حتی ممکنه شما یه شی رو به کاربر جهت ویرایش نشون بدید ولی کاربر بدون اینکه فیلدی رو تغییر بده رو دکمه "ثبت ویرایش" کلیک کنه. در این حالت حتی EF میفهمه که هیچ تغییری روی این شی انجام نشده. در نتیجه تغییری در سمت دیتابیس هم اعمال نمیکنه.
حالا برای اینکه EF بفهمه این شی شما تغییر کرده یا نه؟ (change tracking یا مکانیزم ردیابی تغیرات) برای این کار از روش اصطلاحا snapshot tracking (تصویر برداری لحظه مثلا) استفاده میکنه.
یعنی وقتی یک شی به context اضافه میشه. میاد و یه نسخه ازش (تصویرش) رو ذخیره میکنه (با مقادیر original ) و به هنگام فراخوانی متد DetectChanges میاد و مقادیر جدید (new value) رو با مقادیر قبلی (original value) مقایسه میکنه و میفهمه که این شی تغییر کرده یا نه. و حتی اینکه کدام فیلد هاش تغییر کره. تا کوئری متناسب با همون تغییرات رو بسازه.
حالا لازم نیست این متد DetectChanges رو خودمون دستی فراخوانی کنیم بلکه با فراخوانی یک سری از متد هایی که در بالا عنوان شده این متد DetectChanges نیز فراخوانی میشه تا این تغییرات رو بفهمه
در EF به این مکانیزم ردیابی تغییرات ChangeTracking گویند. و دیگر هیچ ...
@IranAspMvc
وقتی از EF استفاده میکنید. مثلا چیزی Add یا Edit میکنید. EF برای اینکه این تغییرات رو در سمت دیتابیس ذخیره کنه. اول باید بفهمه که چه تغییراتی رخ داده؟! مثلا ایا چیزی Add شده ؟ یا فیلدی ویرایش شده؟ یا شاید شی ای حذف شده. و یا حتی ممکنه شما یه شی رو به کاربر جهت ویرایش نشون بدید ولی کاربر بدون اینکه فیلدی رو تغییر بده رو دکمه "ثبت ویرایش" کلیک کنه. در این حالت حتی EF میفهمه که هیچ تغییری روی این شی انجام نشده. در نتیجه تغییری در سمت دیتابیس هم اعمال نمیکنه.
حالا برای اینکه EF بفهمه این شی شما تغییر کرده یا نه؟ (change tracking یا مکانیزم ردیابی تغیرات) برای این کار از روش اصطلاحا snapshot tracking (تصویر برداری لحظه مثلا) استفاده میکنه.
یعنی وقتی یک شی به context اضافه میشه. میاد و یه نسخه ازش (تصویرش) رو ذخیره میکنه (با مقادیر original ) و به هنگام فراخوانی متد DetectChanges میاد و مقادیر جدید (new value) رو با مقادیر قبلی (original value) مقایسه میکنه و میفهمه که این شی تغییر کرده یا نه. و حتی اینکه کدام فیلد هاش تغییر کره. تا کوئری متناسب با همون تغییرات رو بسازه.
حالا لازم نیست این متد DetectChanges رو خودمون دستی فراخوانی کنیم بلکه با فراخوانی یک سری از متد هایی که در بالا عنوان شده این متد DetectChanges نیز فراخوانی میشه تا این تغییرات رو بفهمه
در EF به این مکانیزم ردیابی تغییرات ChangeTracking گویند. و دیگر هیچ ...
@IranAspMvc
#Utility
متد کمکی نام دهی فایل ها در سرور جهت ذخیره سازی
کلاس زیر که حاوی دو Extension Method هست بهتون در نام دهی فایل های اپلودی از کاربر به سمت سرور جهت ذخیره سازی کمک میکنه
مواردی که در نام گزاری باید رعایت شود.
1- تکراری نبودن نام ها جهت جلوگیری از overwrite شدن فایل ها
2- بهتره نام خود فایل استفاده بشه بجای اینکه از یک عدد یا متن random مثل GUID استفاده بشه (توی سئو تاثیر داره)
3- جهت نظم بیشتر فایل ها بهتره در پوشه های جداگانه سال/ماه/روز ذخیره بشه
متد کمکی کلاس زیر همه این موارد رو مدیریت میکنه و در صورت تکراری بود به سبک نام گذاری ویندوز یک (عدد) بهش اضافه میکنه
مثال:
/Images/1394/11/19/test.jpg
/Images/1394/11/19/test (2).jpg
طرز استفاده ازش هم به این صورته
GetFileName("yourFilename", "pathToSave", ["stringFormatOfDate"])
مثال —---------------—
GetFileName("test.jpg", "uploadfiles/post/images")
خروجی:
\uploadfiles\post\images\1394\11\19\test.jpg
پیشرفته تر —---------
GetFileName("test.jpg", "uploadfiles/post/images", "yy/MM")
خروجی:
\uploadfiles\post\images\94\11\test.jpg
خروجی هم که میده Absolute Path هست و مناسب و آماده ذخیره سازی فایل در این آدرس
@IranAspMvc
متد کمکی نام دهی فایل ها در سرور جهت ذخیره سازی
کلاس زیر که حاوی دو Extension Method هست بهتون در نام دهی فایل های اپلودی از کاربر به سمت سرور جهت ذخیره سازی کمک میکنه
مواردی که در نام گزاری باید رعایت شود.
1- تکراری نبودن نام ها جهت جلوگیری از overwrite شدن فایل ها
2- بهتره نام خود فایل استفاده بشه بجای اینکه از یک عدد یا متن random مثل GUID استفاده بشه (توی سئو تاثیر داره)
3- جهت نظم بیشتر فایل ها بهتره در پوشه های جداگانه سال/ماه/روز ذخیره بشه
متد کمکی کلاس زیر همه این موارد رو مدیریت میکنه و در صورت تکراری بود به سبک نام گذاری ویندوز یک (عدد) بهش اضافه میکنه
مثال:
/Images/1394/11/19/test.jpg
/Images/1394/11/19/test (2).jpg
طرز استفاده ازش هم به این صورته
GetFileName("yourFilename", "pathToSave", ["stringFormatOfDate"])
مثال —---------------—
GetFileName("test.jpg", "uploadfiles/post/images")
خروجی:
\uploadfiles\post\images\1394\11\19\test.jpg
پیشرفته تر —---------
GetFileName("test.jpg", "uploadfiles/post/images", "yy/MM")
خروجی:
\uploadfiles\post\images\94\11\test.jpg
خروجی هم که میده Absolute Path هست و مناسب و آماده ذخیره سازی فایل در این آدرس
@IranAspMvc
چه مقدار از امکانات #VisualStadio 2015 را می شناسید ؟
https://goo.gl/FKKfPK
Languages :
C# - VB NET - F#
C++
ASP NET
HTML
JavaScript - EcmaScript 6 support
CSS
LESS - SASS
JSON
Node.js
PHP
Python
CoffeeScript
TypeScript
Othere : YAML - Dart - Markdown - Windows PowerShell
Client Side Frameworks :
Apache Cordova
Angular js
React js
Bootstrap CSS
Aurelia
Knockout js
Othere : Backbone - Durandal - Ionic - Ember - Breeze
Package Managers :
NuGet - Bower - npm
Task runners :
Grant - Gulp
Testing :
Unit Test - UI Test
Performance Test - Load Test
====================
https://webtooling.visualstudio.com/languages/
@IranAspMvc
https://goo.gl/FKKfPK
Languages :
C# - VB NET - F#
C++
ASP NET
HTML
JavaScript - EcmaScript 6 support
CSS
LESS - SASS
JSON
Node.js
PHP
Python
CoffeeScript
TypeScript
Othere : YAML - Dart - Markdown - Windows PowerShell
Client Side Frameworks :
Apache Cordova
Angular js
React js
Bootstrap CSS
Aurelia
Knockout js
Othere : Backbone - Durandal - Ionic - Ember - Breeze
Package Managers :
NuGet - Bower - npm
Task runners :
Grant - Gulp
Testing :
Unit Test - UI Test
Performance Test - Load Test
====================
https://webtooling.visualstudio.com/languages/
@IranAspMvc
#ImageMagick
کار با تصاویر در دات نت (Convert, Compress, Resize, Crop Images)
https://goo.gl/68LgDx
چندی پیش در مورد بهینه و فشرده سازی تصاویر برای استفاده در وب صبحت کردیم.
یکی از بهترین و بزرگترین کتابخانه های کار با تصاویر Image Magick می باشد
https://www.imagemagick.org/
که لایبرری تحت دات نت آن Magick .Net نام دارد
https://magick.codeplex.com/
و که توسط این کتابخانه که بیش از 100 نوع فرمت تصویری را پشتیبانی میکند میتوان کار های زیر را با تصاویر انجام داد
Convert : تبدیل فرمت تصاویر,
Compress : فشرده و بهینه سازی تصاویر,
Resize : تغییر سایز تصاویر,
Crop : برش تصاویر
Flip, Mirror, Rotate, Distort, Shear and transform images, Adjust image colors, Apply various special effects, Draw text, Lines, polygons, Ellipses
فانکشن های این کتابخانه از طریق Command Line در درسترس و قابل استفاده بوده و علاوه بر آن برای بیش از 18 زبان برنامه نویسی از جمله دات نت، لایبرری منتشر کرده است
این کتابخانه سورس باز بوده و در آدرس مخزن کد زیر قرار دارد
https://github.com/ImageMagick/ImageMagick
آموزش استفاده در دات نت :
https://goo.gl/tWB2D1
آموزش تغییر سایز (resize) کردن تصاویر در دات نت
https://goo.gl/NKPYUg
@IranAspMvc
کار با تصاویر در دات نت (Convert, Compress, Resize, Crop Images)
https://goo.gl/68LgDx
چندی پیش در مورد بهینه و فشرده سازی تصاویر برای استفاده در وب صبحت کردیم.
یکی از بهترین و بزرگترین کتابخانه های کار با تصاویر Image Magick می باشد
https://www.imagemagick.org/
که لایبرری تحت دات نت آن Magick .Net نام دارد
https://magick.codeplex.com/
و که توسط این کتابخانه که بیش از 100 نوع فرمت تصویری را پشتیبانی میکند میتوان کار های زیر را با تصاویر انجام داد
Convert : تبدیل فرمت تصاویر,
Compress : فشرده و بهینه سازی تصاویر,
Resize : تغییر سایز تصاویر,
Crop : برش تصاویر
Flip, Mirror, Rotate, Distort, Shear and transform images, Adjust image colors, Apply various special effects, Draw text, Lines, polygons, Ellipses
فانکشن های این کتابخانه از طریق Command Line در درسترس و قابل استفاده بوده و علاوه بر آن برای بیش از 18 زبان برنامه نویسی از جمله دات نت، لایبرری منتشر کرده است
این کتابخانه سورس باز بوده و در آدرس مخزن کد زیر قرار دارد
https://github.com/ImageMagick/ImageMagick
آموزش استفاده در دات نت :
https://goo.gl/tWB2D1
آموزش تغییر سایز (resize) کردن تصاویر در دات نت
https://goo.gl/NKPYUg
@IranAspMvc
#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
Forwarded from Parsa
#آموزش #ویدئو #MVA
طراحی و ایجاد وب اپلیکیشن های مدرن در Azure
Scott Hanselman - Scott Hunter
https://mva.microsoft.com/en-US/training-courses/building-modern-web-apps-jump-start-8524?l=kdS8Vkmz_3504984382
طراحی و ایجاد وب اپلیکیشن های مدرن در Azure
Scott Hanselman - Scott Hunter
https://mva.microsoft.com/en-US/training-courses/building-modern-web-apps-jump-start-8524?l=kdS8Vkmz_3504984382
Microsoft Virtual Academy
Building Windows Azure Applications Training Course - Microsoft Virtual Academy
Now get training on the latest tools and capabilities of the Windows Azure and Web platform at Microsoft Virtual Academy
Forwarded from Parsa
#آموزش #ویدئو #MVA
ایجاد ارتباط سبک و سریع در لحظه در Aspnet به وسیله SignalR
Jon Galloway - Brady Gaster
https://mva.microsoft.com/en-US/training-courses/lighting-up-realtime-web-communications-with-signalr-8358?l=3aRjikFz_9304984382
ایجاد ارتباط سبک و سریع در لحظه در Aspnet به وسیله SignalR
Jon Galloway - Brady Gaster
https://mva.microsoft.com/en-US/training-courses/lighting-up-realtime-web-communications-with-signalr-8358?l=3aRjikFz_9304984382
Microsoft Virtual Academy
Lighting Up Real-Time Web Communications with SignalR
Free, online MVA course for Web Devs on ASP.NETSignalR and its real-time web functionality, dozens of demos and expert tips.
Forwarded from Parsa
#آموزش #ویدئو #MVA
طراحی WebApi
Christopher Harrison - Jeremy Likness
https://mva.microsoft.com/en-US/training-courses/web-api-design-jump-start-8689?l=327KUcH1_704984382
طراحی WebApi
Christopher Harrison - Jeremy Likness
https://mva.microsoft.com/en-US/training-courses/web-api-design-jump-start-8689?l=327KUcH1_704984382
Microsoft Virtual Academy
Web API Design Jump Start - Microsoft Virtual Academy
Explore ASP.NET Web API, uses, and nuances, including security, versioning, and error handling, with this free course from Microsoft Virtual Academy.
Forwarded from Parsa
#آموزش #ویدئو #MVA
استفاده از انتیتی فریموورک در MVC
Adam Tuliper - Cristopher Horrison
https://mva.microsoft.com/en-US/training-courses/implementing-entity-framework-with-mvc-8931?l=Kkfd5FC3_1904984382
استفاده از انتیتی فریموورک در MVC
Adam Tuliper - Cristopher Horrison
https://mva.microsoft.com/en-US/training-courses/implementing-entity-framework-with-mvc-8931?l=Kkfd5FC3_1904984382
Microsoft Virtual Academy
Implementing Entity Framework with MVC - Microsot Virtual Academy
Learn about Entity Framework, including installation and configuration, how EF can create databases for you, and how to manage that creation.
#GoogleMap, #Leaflet, #CkEditor
استفاده از گوگل مپ در ویرایشگر متنی تحت وب CkEditor
https://goo.gl/KrD0iP
یکی از بهترین و کامل ترین پلاگین های کار با GoogleMap پلاگین Leaflet می باشد. و مزیت اون سازگاری کامل با موبایل هست
https://leafletjs.com/
این کتابخانه سورس باز بوده و در آدرس زیر دردسترس است
https://github.com/Leaflet/Leaflet
و اما همین پلاگین رو برای ویرایشگر متنی CkEditor نوشته شده و این امکان رو به شما میده که داخل ckeditor مپ جدید ای ایجاد کنین
https://ckeditor.com/addon/leaflet
نمونه:
https://www.ranelpadon.com/sites/all/libraries/ckeditor/plugins/leaflet/demo/index.html
@IranAspMvc
استفاده از گوگل مپ در ویرایشگر متنی تحت وب CkEditor
https://goo.gl/KrD0iP
یکی از بهترین و کامل ترین پلاگین های کار با GoogleMap پلاگین Leaflet می باشد. و مزیت اون سازگاری کامل با موبایل هست
https://leafletjs.com/
این کتابخانه سورس باز بوده و در آدرس زیر دردسترس است
https://github.com/Leaflet/Leaflet
و اما همین پلاگین رو برای ویرایشگر متنی CkEditor نوشته شده و این امکان رو به شما میده که داخل ckeditor مپ جدید ای ایجاد کنین
https://ckeditor.com/addon/leaflet
نمونه:
https://www.ranelpadon.com/sites/all/libraries/ckeditor/plugins/leaflet/demo/index.html
@IranAspMvc
#Bootstrap #Foundation #Skeleton
مقایسه 3 فریمورک bootstrap, foundation, skeleton
https://responsive.vermilion.com/compare.php
@IranAspMvc
مقایسه 3 فریمورک bootstrap, foundation, skeleton
https://responsive.vermilion.com/compare.php
@IranAspMvc
ماکروسافت #Xamarin را خرید
https://blogs.microsoft.com/blog/2016/02/24/microsoft-to-acquire-xamarin-and-empower-more-developers-to-build-apps-on-any-device/
https://blogs.microsoft.com/blog/2016/02/24/microsoft-to-acquire-xamarin-and-empower-more-developers-to-build-apps-on-any-device/
The Official Microsoft Blog
Microsoft to acquire Xamarin and empower more developers to build apps on any device
As the role of mobile devices in people’s lives expands even further, mobile app developers have become a driving force for software innovation. At Microsoft, we are working to enable even greater developer opportunity and innovation by providing the best…
#Concurrency , #EntityFramework
چه کسی زودتر ظرف میوه را بر می دارد ؟! (همزمانی / Concurrency)
https://www.codeproject.com/KB/aspnet/6WaysLock/1a.JPG
یکی از مواردی که در پروژه های بزرگ حائز اهمیت است مبحث Concurrency یا همزمانی می باشد
فرض کنید دو نفر همزمان از یک حساب بانکی می خواهند پول برداشت کنند و موجودی 200 تومان است
هر دو کارت بانکی خود را وارد کرده و موجودی 200 تومان را مشاهده میکنند. اولی 200 تومان برداشت میکند. و دومی نیز درخواست برداشت 200 تومان از حساب را انجام میدهد
در اینجا باید شرطی گذاشت که اگر موجودی همچنان 200 تومان هست اجازه برداشت به دومی صادر شود و اگر موجودی فعلی 0 شده اجازه برداشت صادر نشود. که در غیر این صورت سیستم بانکی 200 تومان ضرر خواهد کرد.
اگر بخواهیم فنی بررسی کنیم. برنامه نویس ما، برای ویرایش حساب بانکی، علاوه بر آیدی حساب، موجودی فعلی که درزمان ویرایش وجود داشته را به سمت سرور پاس میدهد که در صورت صحت هر دو شرط عملیات آپدیت وانجام شود.
اینجاست شرط عملیات ما صرفا بر پایه آیدی نبوده و شامل پارامتر های دیگری نیز می شود.
مشابه همین مثال در ویرایش همزمان یک پست در یک وبسایت ممکن است رخ دهد
برای حل این مشکل (همزمانی) باید از روش بالا که توضیح داده شد. و یا روش دیگری که Entity Framework تعبیه کرده است به نام RowVersion استفاده کرد
در این روش یک ستون به نام RowVersion که نوع آن byte[] است به جدول شما اضافه میشود. که این فیلد به صورت افزایشی و غیر تکراری به طور خودکار توسط EF مقدار دهی شود
در واقع با هر بار اپدیت این فیلد مقدار جدیدی میگیرد. نشان میدهد که مقادیر این سطر تغییر یافته است. پس به شخص دیگری که در حال آپدیت کردن همین سطر است هشدار میدهد که شخص دیگری همزمان با شما این سطر را ویرایش کرده است. دیگر اجازه ویرایش نمیدهد. همچنین میتوان مقادیر جدید را به شخص نشان داد و یا اینکه چه کسی آن را ویرایش کرده است
آموزش :
https://goo.gl/3LvklT
https://goo.gl/qekRho
@IranAspMvc
چه کسی زودتر ظرف میوه را بر می دارد ؟! (همزمانی / Concurrency)
https://www.codeproject.com/KB/aspnet/6WaysLock/1a.JPG
یکی از مواردی که در پروژه های بزرگ حائز اهمیت است مبحث Concurrency یا همزمانی می باشد
فرض کنید دو نفر همزمان از یک حساب بانکی می خواهند پول برداشت کنند و موجودی 200 تومان است
هر دو کارت بانکی خود را وارد کرده و موجودی 200 تومان را مشاهده میکنند. اولی 200 تومان برداشت میکند. و دومی نیز درخواست برداشت 200 تومان از حساب را انجام میدهد
در اینجا باید شرطی گذاشت که اگر موجودی همچنان 200 تومان هست اجازه برداشت به دومی صادر شود و اگر موجودی فعلی 0 شده اجازه برداشت صادر نشود. که در غیر این صورت سیستم بانکی 200 تومان ضرر خواهد کرد.
اگر بخواهیم فنی بررسی کنیم. برنامه نویس ما، برای ویرایش حساب بانکی، علاوه بر آیدی حساب، موجودی فعلی که درزمان ویرایش وجود داشته را به سمت سرور پاس میدهد که در صورت صحت هر دو شرط عملیات آپدیت وانجام شود.
اینجاست شرط عملیات ما صرفا بر پایه آیدی نبوده و شامل پارامتر های دیگری نیز می شود.
مشابه همین مثال در ویرایش همزمان یک پست در یک وبسایت ممکن است رخ دهد
برای حل این مشکل (همزمانی) باید از روش بالا که توضیح داده شد. و یا روش دیگری که Entity Framework تعبیه کرده است به نام RowVersion استفاده کرد
در این روش یک ستون به نام RowVersion که نوع آن byte[] است به جدول شما اضافه میشود. که این فیلد به صورت افزایشی و غیر تکراری به طور خودکار توسط EF مقدار دهی شود
در واقع با هر بار اپدیت این فیلد مقدار جدیدی میگیرد. نشان میدهد که مقادیر این سطر تغییر یافته است. پس به شخص دیگری که در حال آپدیت کردن همین سطر است هشدار میدهد که شخص دیگری همزمان با شما این سطر را ویرایش کرده است. دیگر اجازه ویرایش نمیدهد. همچنین میتوان مقادیر جدید را به شخص نشان داد و یا اینکه چه کسی آن را ویرایش کرده است
آموزش :
https://goo.gl/3LvklT
https://goo.gl/qekRho
@IranAspMvc
Forwarded from Iran .Net
تیم ASP.NET انقلابی به پا کرده اند. آخرین پلتفرم آن ها (ASP.NET Core) در تست های این تیم توانسته است تعداد 1.15 میلیون درخواست را در یک ثانیه مدیریت کرده و پاسخ دهد.
این در صورتی است که نسخه ASP.NET 4.6، بر روی همان سخت افزار تنها توانسته است 0.05 میلیون درخواست را در ثانیه پاسخ دهد.
این یعنی چیزی در حدود 2300 درصد افزایش قدرت پاسخگوییِ پلتفرم محبوب ما! 👍
این در صورتی است که نسخه ASP.NET 4.6، بر روی همان سخت افزار تنها توانسته است 0.05 میلیون درخواست را در ثانیه پاسخ دهد.
این یعنی چیزی در حدود 2300 درصد افزایش قدرت پاسخگوییِ پلتفرم محبوب ما! 👍
Microsoft
ASP.NET Core, an open-source web development framework | .NET
Build web apps and services that run on Windows, Linux, and macOS using C#, HTML, CSS, and JavaScript. Get started for free on Windows, Linux, or macOS.
#AspMvc, #CMS, #Orchard, #MvcForum, #NopCommerce
سه سیستم که پیشنهاد میشود(نکته مهم: متن باز بودن این سه سیستم هستش):
Orchard -> وب سایت
MvcForum -> فروم
NopCommerce -> فروشگاه
جریان اختراع چرخ رو که میدونید... همون.
در زیر سه لینک مخزن قرار گرفته است:
https://github.com/OrchardCMS/Orchard
https://github.com/YodasMyDad/mvcforum
https://github.com/nopSolutions/nopCommerce/releases/
@IranAspMvc
سه سیستم که پیشنهاد میشود(نکته مهم: متن باز بودن این سه سیستم هستش):
Orchard -> وب سایت
MvcForum -> فروم
NopCommerce -> فروشگاه
جریان اختراع چرخ رو که میدونید... همون.
در زیر سه لینک مخزن قرار گرفته است:
https://github.com/OrchardCMS/Orchard
https://github.com/YodasMyDad/mvcforum
https://github.com/nopSolutions/nopCommerce/releases/
@IranAspMvc