پیشنهادها
استفاده از spatial data در EF
پشتیبانی از spatial data به EF 5 اضافه شد. نیاز است به کمک مآخذ ذیل، یک مطلب جدید در مورد آن تهیه شود:
- Basic Spatial Data with SQL Server and Entity Framework 5.0
- Using spatial data types with Entity Framework 5.0
- Using Spatial Data with SQL Server 2012, Entity Framework 5 and ASP.NET MVC
- Spatial Data Type Support in Entity Framework 5
- Using Spatial Data in ASP.Net MVC with SQL Server 2012, Entity Framework 5 and Infragistics jQuery Map
- Spatial Data and the Entity Framework
- Spatial data and Entity Framework - from real world usage
- Entity Framework Spatial Part 1: Loading data
- Spatial Data type support in Entity Framework 5.0
- Creating a Geometry Point in Entity Framework
- Spatial - Code First
- Spatial Types in the Entity Framework
- How To: Using spatial data with Entity Framework and Connector/Net
مدل سازی مفهومی بارزترین ویژگی Entity Framework است و اصل این کتاب را تشکیل میدهد. Entity Framework بر اساس الگوهای دسترسی به داده قبلی ساخته شده است و محیطی را فراهم کرده است که از مدل سازی در سطح domain واقعی پشتیبانی میکند.
Entity Framework 6 تبدیل به تکنولوژی دسترسی به داده بالغ و پخته ای شده است که با امکانات زیاد خود، آمادهی استفاده در برنامههای جدید و قدیمی است.
Entity framework database-first
Entity framework model-first
Entity framework code-first
NHibernate
LLBLGen Pro
Telerik OpenAccess ORM
EntitySpaces
Devart
SubSonic
LINQ to SQL
از Micro ORMs مانند Dapper یا Massive
از یک ORM دست ساز خانگی
از ORM استفاده نمیکنم
Entity framework model-first
Entity framework code-first
NHibernate
LLBLGen Pro
Telerik OpenAccess ORM
EntitySpaces
Devart
SubSonic
LINQ to SQL
از Micro ORMs مانند Dapper یا Massive
از یک ORM دست ساز خانگی
از ORM استفاده نمیکنم
بد نیست لیست تعدادی از بانکهای اطلاعاتی مهم قابل استفاده در دات نت به همراه درایورهای ADO.NET آنها را با هم مرور نمائیم.
بانکهای اطلاعاتی قابل استفاده در دات نت فریم ورک | ||||||
ردیف | بانک اطلاعاتی | سایت مرجع | درایور ADO.NET | امکان استفاده از LINQ | مجوز استفاده | توضیحات |
1 | SQL Server 2000/2005/2008/2008 R2 | + | توکار (به صورت پیش فرض در دات نت فریم ورک موجود است) | بلی . به کمک LINQ to SQL ، Entity Framework ، NHibernate و بسیاری از ORM های دیگر | رایگان - تجاری | نسخههای Express آن رایگان است. |
2 | Microsoft SQL Azure | + | بلی : + | بلی. به کمک LINQ to SQL و Entity Framework | تجاری | |
3 | SQL Server Compact | + | بلی : + | بلی. به کمک LINQ to SQL و Entity Framework | رایگان | |
4 | Advantage Database Server | + | قابل دریافت از سایت اصلی: + | بلی. به کمک Entity framework و Telerik OpenAccess ORM | تجاری | |
5 | SQL Anywhere | + | قابل دریافت از سایت اصلی: + | بلی. به کمک Entity framework و Telerik OpenAccess ORM | رایگان - تجاری | Web Edition آن رایگان است. |
6 | MySQL | + | قابل دریافت از سایت اصلی : + | بلی . به کمک NHibernate ، LightSpeed ، DbLinq و تعدادی دیگر از ORM's | رایگان - تجاری | |
7 | Oracle | + | پشتیبانی توکار آن به زودی حذف خواهد شد اما از سایت اصلی قابل دریافت است : + | بلی . به کمک NHibernate ، LightSpeed ، DbLinq و تعدادی دیگر از ORM's | رایگان - تجاری | نسخهی Express آن رایگان است. |
8 | Access | + | توکار | بلی. به کمک ALinq ، NHibernate و یا LINQ to DataSets | تجاری | اگر از دات نت فریم ورک سه و نیم، سرویس پک یک استفاده کنید، امکان استفاده از LINQ to SQL جهت کار با بانکهای اطلاعاتی اکسس نیز مهیا است: + |
9 | SQLite | + | مهیا به صورت سورس باز : + | بلی. درایور ADO.NET آن پشتیبانی از Entity Framework را نیز اضافه میکند. همچنین NHibernate ، ALinq و سایر ORM's را باید به این لیست اضافه کرد. | رایگان | |
10 | Firebird | + | قابل دریافت از سایت اصلی: + | بلی. توسط ALinq ، NHibernate و موارد دیگر. | رایگان | |
11 | PostgreSQL | + | قابل دریافت از سایت اصلی: + | بلی. توسط NHibernate ، DBLinq و موارد دیگر | رایگان | |
12 | DB2 UDB | + | قابل دریافت از سایت اصلی: + | بلی. توسط NHibernate | تجاری | |
13 | ScimoreDB | + | قابل دریافت از سایت اصلی: + | محدود. توسط LINQ to DataSets | رایگان | |
14 | MongoDB | + | معرفی شده در سایت اصلی : + | بلی. درایور ADO.NET معرفی شده به همراه پروایدر LINQ نیز میباشد. | رایگان | |
15 | CouchDB | + | معرفی شده در سایت اصلی : + | محدود | رایگان | |
16 | VistaDB | + | اساسا برای دات نت نوشته شده است. | بلی. به کمک Entity framework | تجاری |
نظرات مطالب
پیاده سازی CQRS توسط MediatR - قسمت اول
سلام؛ اگر فرض کنیم که پروژه ای تا 60 درصد پیاده سازی شده و زیر ساخت آن برای Event Sourcing دیده نشده باشد، حال چطور میتوان این مفهوم را برای این پروژه پیاده سازی کرد؟ (در نظر داشته باشید که پروژه بالغ بر 100 Entity دارد و از Entity Framework Core و IUnitOfWork استفاده میکند)
بله. همین روال رو میتونید توسط افزونه «Entity Framework Power Tools» هم انجام بدید (گزینه Generate Views را به منوی کلیک راست بر روی Entity Data Model/*.EDMX اضافه میکند).
مطالب
OpenCVSharp #10
محاسبه و ترسیم Histogram تصاویر
هیستوگرام یک تصویر، توزیع میزان روشنایی آن تصویر را نمایش میدهد و در آن تعداد نقاط قسمتهای روشن تصویر، ترسیم میشوند. محاسبهی هیستوگرام تصاویر در حین دیباگ الگوریتمهای پردازش تصویر، کاربرد زیادی دارند.
OpenCV به همراه متد توکاری است به نام cv::calcHist که قادر است هیستوگرام تعدادی آرایه را محاسبه کند و در C++ API آن قرار دارد. البته هدف اصلی این متد، انجام محاسبات مرتبط است و در اینجا قصد داریم این محاسبات را نمایش دهیم.
تغییر میزان روشنایی و وضوح تصاویر در OpenCV
همانطور که عنوان شد، کار هیستوگرام تصاویر، نمایش توزیع میزان روشنایی نقاط و اجزای آنها است. بنابراین میتوان جهت مشاهدهی تغییر هیستوگرام محاسبه شده با تغییر میزان روشنایی و وضوح تصویر، از متد ذیل کمک گرفت:
در اینجا src تصویر اصلی است. brightness و contrast، مقادیر میزان روشنایی و وضوح دریافتی از کاربر هستند. این مقادیر را میتوان به متد ConvertTo ارسال کرد تا src را تبدیل به modifiedSrc نماید و وضوح و روشنایی آنرا تغییر دهد.
پس از اینکه متد تغییر وضوح تصویر اصلی را تهیه کردیم، میتوان به پنجرهی نمایش تصویر اصلی، دو tracker جهت دریافت brightness و contrast اضافه کرد و به این ترتیب امکان نمایش پویای تغییرات را مهیا نمود:
در اینجا src تصویر اصلی است. پنجرهی Source کار نمایش تصویر اصلی را به عهده دارد. همچنین به این پنجره، دو tracker اضافه شدهاند تا کار دریافت مقادیر روشنایی و وضوح را از کاربر، مدیریت کنند.
پنجرهی دومی نیز به نام هیستوگرام در اینجا تعریف شدهاست. در این پنجره قصد داریم هیستوگرام تغییرات پویای تصویر اصلی را نمایش دهیم.
روش محاسبهی هیستوگرام تصاویر و نمایش آنها در OpenCVSharp
کدهای کامل محاسبهی هیستوگرام تصویر اصلی تغییر یافته (modifiedSrc) و سپس نمایش آنرا در پنجرهی histogramWindow، در ادامه ملاحظه میکنید:
معادل متد cv::calcHist، متد Cv2.CalcHist در OpenCVSharp است. این متد آرایهای از تصاویر را قبول میکند که در اینجا تنها قصد داریم با یک تصویر کار کنیم. به همین جهت آرایههای images، اندازههای آنها و بازههای min/max این تصاویر تنها یک عضو دارند. خروجی این متد پارامتر hist آن است که توسط یک new Mat تامین شدهاست. مقدار dims به یک تنظیم شدهاست؛ زیرا در اینجا تنها قصد داریم شدت نقاط را اندازه گیری کنیم. پارامتر ranges مشخص میکند که مقادیر اندازه گیری شده باید در چه بازهایی جمع آوری شوند.
پس از محاسبهی هیستوگرام، یک تصویر خالی پر شدهی با عدد یک را توسط متد Mat.Ones ایجاد میکنیم. این تصویر به عنوان منبع تصویر هیستوگرام نمایش داده شده، مورد استفاده قرار میگیرد. سپس نیاز است اطلاعات محاسبه شده، در مقیاسی قرار گیرند که قابل نمایش باشد. به همین جهت با استفاده از متد Normalize، آنها را در مقیاس و بازهی ارتفاع تصویر، تغییر اندازه خواهیم داد. سپس به کمک متد مستطیل، خروجی آرایه هیستوگرام را در صفحه، با رنگ خاکستری مشخص شده توسط متد Scalar.All ترسیم خواهیم کرد.
همانطور که در این تصویر ملاحظه میکنید، با کدرتر شدن تصویر اصلی، هیستوگرام آن، توزیع روشنایی کمتری را نمایش میدهد.
کدهای کامل این مثال را از اینجا میتوانید دریافت کنید.
هیستوگرام یک تصویر، توزیع میزان روشنایی آن تصویر را نمایش میدهد و در آن تعداد نقاط قسمتهای روشن تصویر، ترسیم میشوند. محاسبهی هیستوگرام تصاویر در حین دیباگ الگوریتمهای پردازش تصویر، کاربرد زیادی دارند.
OpenCV به همراه متد توکاری است به نام cv::calcHist که قادر است هیستوگرام تعدادی آرایه را محاسبه کند و در C++ API آن قرار دارد. البته هدف اصلی این متد، انجام محاسبات مرتبط است و در اینجا قصد داریم این محاسبات را نمایش دهیم.
تغییر میزان روشنایی و وضوح تصاویر در OpenCV
همانطور که عنوان شد، کار هیستوگرام تصاویر، نمایش توزیع میزان روشنایی نقاط و اجزای آنها است. بنابراین میتوان جهت مشاهدهی تغییر هیستوگرام محاسبه شده با تغییر میزان روشنایی و وضوح تصویر، از متد ذیل کمک گرفت:
private static void updateBrightnessContrast(Mat src, Mat modifiedSrc, int brightness, int contrast) { brightness = brightness - 100; contrast = contrast - 100; double alpha, beta; if (contrast > 0) { double delta = 127f * contrast / 100f; alpha = 255f / (255f - delta * 2); beta = alpha * (brightness - delta); } else { double delta = -128f * contrast / 100; alpha = (256f - delta * 2) / 255f; beta = alpha * brightness + delta; } src.ConvertTo(modifiedSrc, MatType.CV_8UC3, alpha, beta); }
پس از اینکه متد تغییر وضوح تصویر اصلی را تهیه کردیم، میتوان به پنجرهی نمایش تصویر اصلی، دو tracker جهت دریافت brightness و contrast اضافه کرد و به این ترتیب امکان نمایش پویای تغییرات را مهیا نمود:
using (var src = new Mat(@"..\..\Images\Penguin.Png", LoadMode.AnyDepth | LoadMode.AnyColor)) { using (var sourceWindow = new Window("Source", image: src, flags: WindowMode.AutoSize | WindowMode.FreeRatio)) { using (var histogramWindow = new Window("Histogram", flags: WindowMode.AutoSize | WindowMode.FreeRatio)) { var brightness = 100; var contrast = 100; var brightnessTrackbar = sourceWindow.CreateTrackbar( name: "Brightness", value: brightness, max: 200, callback: pos => { brightness = pos; updateImageCalculateHistogram(sourceWindow, histogramWindow, src, brightness, contrast); }); var contrastTrackbar = sourceWindow.CreateTrackbar( name: "Contrast", value: contrast, max: 200, callback: pos => { contrast = pos; updateImageCalculateHistogram(sourceWindow, histogramWindow, src, brightness, contrast); }); brightnessTrackbar.Callback.DynamicInvoke(brightness); contrastTrackbar.Callback.DynamicInvoke(contrast); Cv2.WaitKey(); } } }
پنجرهی دومی نیز به نام هیستوگرام در اینجا تعریف شدهاست. در این پنجره قصد داریم هیستوگرام تغییرات پویای تصویر اصلی را نمایش دهیم.
روش محاسبهی هیستوگرام تصاویر و نمایش آنها در OpenCVSharp
کدهای کامل محاسبهی هیستوگرام تصویر اصلی تغییر یافته (modifiedSrc) و سپس نمایش آنرا در پنجرهی histogramWindow، در ادامه ملاحظه میکنید:
private static void calculateHistogram1(Window histogramWindow, Mat src, Mat modifiedSrc) { const int histogramSize = 64; int[] dimensions = { histogramSize }; // Histogram size for each dimension Rangef[] ranges = { new Rangef(0, histogramSize) }; // min/max using (var histogram = new Mat()) { Cv2.CalcHist( images: new[] { modifiedSrc }, channels: new[] { 0 }, mask: null, hist: histogram, dims: 1, histSize: dimensions, ranges: ranges); using (var histogramImage = (Mat)(Mat.Ones(rows: src.Rows, cols: src.Cols, type: MatType.CV_8U) * 255)) { // Scales and draws histogram Cv2.Normalize(histogram, histogram, 0, histogramImage.Rows, NormType.MinMax); var binW = Cv.Round((double)histogramImage.Cols / histogramSize); var color = Scalar.All(100); for (var i = 0; i < histogramSize; i++) { Cv2.Rectangle(histogramImage, new Point(i * binW, histogramImage.Rows), new Point((i + 1) * binW, histogramImage.Rows - Cv.Round(histogram.Get<float>(i))), color, -1); } histogramWindow.Image = histogramImage; } } }
پس از محاسبهی هیستوگرام، یک تصویر خالی پر شدهی با عدد یک را توسط متد Mat.Ones ایجاد میکنیم. این تصویر به عنوان منبع تصویر هیستوگرام نمایش داده شده، مورد استفاده قرار میگیرد. سپس نیاز است اطلاعات محاسبه شده، در مقیاسی قرار گیرند که قابل نمایش باشد. به همین جهت با استفاده از متد Normalize، آنها را در مقیاس و بازهی ارتفاع تصویر، تغییر اندازه خواهیم داد. سپس به کمک متد مستطیل، خروجی آرایه هیستوگرام را در صفحه، با رنگ خاکستری مشخص شده توسط متد Scalar.All ترسیم خواهیم کرد.
همانطور که در این تصویر ملاحظه میکنید، با کدرتر شدن تصویر اصلی، هیستوگرام آن، توزیع روشنایی کمتری را نمایش میدهد.
کدهای کامل این مثال را از اینجا میتوانید دریافت کنید.
اشتراکها