نظرات اشتراکها
اگر بدنبال استفاده کردن از تکنولوژی های Ef core و Dapper با الگو CQRS در پروژه های ASP.NET Core هستید این مقاله به شما کمک خواهد کرد.
پلتفرم خودکار یه پروژه متن بازه و ایده اصلی اش تولید یک نرم افزار تحت وب از صفر تا صد به صورت آنلاین و بدون نیاز به ابزار هایی مثل ویژوال استدیو Sql Management Studio و TFS و غیره و تنها با یک مرورگر ساده مثل Chrome .
پلتفرم خودکار همانند ویژوال استدیو دو حالت Release و دیباگ دارد که این امکان را به برنامه نویسان میدهد که کدهای اجرایی در سمت سرور و کلاینت در دو حالت دیباگ و Release کاملا مختلف و مجزا باشند.
یعنی شما برای ساخت یک وب سایت میتونید تمام کدهای سمت سرور و کلاینت و دیتابیس رو از طریق یک مرورگر وب بنویسید و اگه نیاز به کامپایل باشه , خود پلتفرم این کار رو انجام میده.
تعدادی از این کدها : C# VB.Net SQL CSS JavaScript SASS LESS Coffee و غیره
اما غیر از اینها پلتفرم خودکار شامل یه سورس کنترل و مدیریت ورژن و Build System و Load Module اختصاصی هم میشه .یعتی عملا شما نیازی به سورس کنترلهای آنلاین
مثل GitHub , ... را ندارید و میتونید دسترسی ویرایش و یا Build و یا Test و یا اجرا رو در سطح یک خط کد تا یک پروژه به طور کامل به سایر برنامه نویسان بدهید.
برای طراحی و ساخت دیتابیس تون و مدیریت Migrationها هم یک ابزار انلاین داره که پشت صحنه از Entity FrameWork استفاده میکنه و تمامی امکانات Entity FrameWork برای ساخت و پشتیبانی دیتابیس رو به صورت آنلاین در اختیار شما میزاره.
وابسته به فریم ورک خاصی در سمت کلاینت نیست .ولی پیش فرض اش JQUERY و بوت استرپ استفاده میکنه. شما میتونید N تا فریم ورک و قالب متفاوت تعریف کنید , به طوری که برای مثال یه صفحه وبسایتتون با React و صفحه دیگه با انگولار باشه .
برای دیباگ تحت وب هم امکاناتی در اختیار برنامه نویس قرار میده مثل ریموت دیباگ و یا دیباگ در ویژوال استدیو.اینها بخشی از امکانات پلتفرم خودکاره برای آشنایی بیشتر با امکانات پلتفرم از لینکهای زیر استفاده کنید.
حدود 70 ساعت آموزش در آپارات :
خودم تا حالا دو تا وبسایت باهاش نوشتم و البته چند تا دیگه هم در دست توسعه است. وبسایت های کارشناسان.نت با قالب بوت استرپ و jquery نوشته شده و داستان موفقیت با قالب Material و jquer نوشته شده است.
دوستان عزیز قصد دارم ورژن core پلتفرم خودکار رو بنویسم و یه سری امکانات جدید مثل کامپایلر و BuildSystem ری اکت رو اضافه کنم و هوش مصنوعی IDE رو هم افزایش بدم. اگر علاقه مند به همکاری هستید برام پیام بذارید.
با توجه به متن باز بودن پلتفرم , سود مالی وجود نداره ولی میتونه رزومه خوبی براتون بشه و از اون مهمتره میتونه پروژه فوق العاده ارزشمند و کاربردی باشه.
بله. همین روال رو میتونید توسط افزونه «Entity Framework Power Tools» هم انجام بدید (گزینه Generate Views را به منوی کلیک راست بر روی Entity Data Model/*.EDMX اضافه میکند).
نظرات مطالب
خودکار کردن تعاریف DbSetها در EF Code first
در EF Core یک چنین شکلی را پیدا میکند (البته «روش صحیح بارگذاری پویای اسمبلیها در NET Core.» را هم مدنظر داشته باشید):
public class BloggingContext : DbContext { protected override void OnModelCreating(ModelBuilder modelBuilder) { loadEntities(modelBuilder, asmPath: @"D:\Prog\SomeAsm1\bin\Debug\netstandard2.0\SomeAsm1.dll", nameSpace: "SomeAsm1.Models"); base.OnModelCreating(modelBuilder); } private static void loadEntities(ModelBuilder modelBuilder, string asmPath, string nameSpace) { var modelInAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(asmPath); // var modelInAssembly = Assembly.Load(new AssemblyName("ModuleApp")); var entityMethod = typeof(ModelBuilder).GetMethod("Entity", new Type[] { }); foreach (var type in modelInAssembly.ExportedTypes) { if (type.BaseType is System.Object && !type.IsAbstract && type.Namespace == nameSpace) { entityMethod.MakeGenericMethod(type).Invoke(modelBuilder, new object[] { }); } } }
تا قبل از EF 6 برای تهیه لاگ SQL تولیدی توسط Entity framework نیاز بود به ابزارهای ثالث متوسل شد. برای مثال از انواع پروفایلرها استفاده کرد (^ و ^ و ^). اما در EF 6 امکان توکاری به نام Command Interception تدارک دیده شده است تا توسط آن بتوان بدون نیاز به ابزارهای جانبی، به درون سیستم EF متصل شد و دستورات تولیدی آنرا پیش از اجرای بر روی بانک اطلاعاتی دریافت و مثلا لاگ کرد. در ادامه نمونهای از این عملیات را بررسی خواهیم کرد.
تهیه کلاس SimpleInterceptor
برای اتصال به متدهای اجرای دستورات SQL در EF 6 تنها کافی است یک کلاس جدید را از کلاس پایه DbCommandInterceptor مشتق کرده و سپس متدهای کلاس پایه را override کنیم. در این متدها، فراخوانی متدهای کلاس پایه، معادل خواهند بود با اجرای واقعی دستور بر روی بانک اطلاعاتی. به این ترتیب حتی میتوان مدت زمان انجام عملیات را نیز بدست آورد. در اینجا command.CommandText معادل است با دستور SQL در حال اجرا و همچنین نیاز است تا تمام سطوح تو در توی استثناهای احتمالی رخ داده را نیز بررسی کرد:
نحوه استفاده از کلاس SimpleInterceptor
کلاس فوق را کافی است تنها یکبار در آغاز برنامه (مثلا در متد Application_Start برنامههای وب) به EF 6 معرفی کرد:
اکنون اگر برنامه را اجرا کنیم، خروجی SQL و زمانهای اجرای عملیات را در پنجره دیباگ VS.NET میتوان مشاهده کرد:
تهیه کلاس SimpleInterceptor
برای اتصال به متدهای اجرای دستورات SQL در EF 6 تنها کافی است یک کلاس جدید را از کلاس پایه DbCommandInterceptor مشتق کرده و سپس متدهای کلاس پایه را override کنیم. در این متدها، فراخوانی متدهای کلاس پایه، معادل خواهند بود با اجرای واقعی دستور بر روی بانک اطلاعاتی. به این ترتیب حتی میتوان مدت زمان انجام عملیات را نیز بدست آورد. در اینجا command.CommandText معادل است با دستور SQL در حال اجرا و همچنین نیاز است تا تمام سطوح تو در توی استثناهای احتمالی رخ داده را نیز بررسی کرد:
using System; using System.Data.Common; using System.Data.Entity.Infrastructure.Interception; using System.Diagnostics; using System.Text; namespace EFCommandInterception { public class SimpleInterceptor : DbCommandInterceptor { public override void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext) { var timespan = runCommand(() => base.ScalarExecuting(command, interceptionContext)); logData(command, interceptionContext.Exception, timespan); } public override void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext) { var timespan = runCommand(() => base.NonQueryExecuting(command, interceptionContext)); logData(command, interceptionContext.Exception, timespan); } public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { var timespan = runCommand(() => base.ReaderExecuting(command, interceptionContext)); logData(command, interceptionContext.Exception, timespan); } private static Stopwatch runCommand(Action command) { var timespan = Stopwatch.StartNew(); command(); timespan.Stop(); return timespan; } private static void logData(DbCommand command, Exception exception, Stopwatch timespan) { if (exception != null) { Trace.TraceError(formatException(exception, "Error executing command: {0}", command.CommandText)); } else { Trace.TraceInformation(string.Concat("Elapsed time: ", timespan.Elapsed, " Command: ", command.CommandText)); } } private static string formatException(Exception exception, string fmt, params object[] vars) { var sb = new StringBuilder(); sb.Append(string.Format(fmt, vars)); sb.Append(" Exception: "); sb.Append(exception.ToString()); while (exception.InnerException != null) { sb.Append(" Inner exception: "); sb.Append(exception.InnerException.ToString()); exception = exception.InnerException; } return sb.ToString(); } } }
کلاس فوق را کافی است تنها یکبار در آغاز برنامه (مثلا در متد Application_Start برنامههای وب) به EF 6 معرفی کرد:
DbInterception.Add(new SimpleInterceptor());
ASP.NET Core 1.0 (formerly ASP.NET 5) provides a revamped Web development framework geared towards the requirements of modern Web applications. The new framework, currently in RC1, requires you to learn many new concepts not found in ASP.NET MVC 5. To that end, this article enumerates a few important features that ASP.NET MVC 5 developers should know as they prepare to learn this new framework.
اشتراکها