همواره حذف و به روز رسانی تعداد زیادی رکورد توسط EF، بسیار غیربهینه و کند بودهاست؛ از این جهت که یکی از روشهای انجام اینکار، کوئری گرفتن از رکوردهای مدنظر جهت حذف، سپس بارگذاری آنها در حافظه و در آخر حذف یکی یکی آنها بودهاست: using var dbContext = new MyDbContext(); var objectToDelete = await dbContext.Objects.FirstAsync(o => o.Id == id); dbContext.Objects.Remove(objectToDelete); await dbContext.SaveChangesAsync(); در اینجا در ابتدا، شیءای که قرار است حذف شود، از بانک اطلاعاتی کوئری گرفته میشود تا وارد سیستم Change Tracking شود. سپس از این سیستم ردیابی اطلاعات درون حافظهای، حذف خواهد شد و در نهایت این تغییرات به بانک اطلاعاتی اعمال میشوند. بنابراین در این مثال ساده، حداقل دوبار رفت و برگشت به بانک اطلاعاتی وجود خواهد داشت. البته راه دومی نیز برای انجام اینکار وجود دارد: using var dbContext = new MyDbContext(); var objectToDelete = new MyObject { Id = id }; dbContext.Objects.Remove(objectToDelete); await dbContext.SaveChangesAsync(); در این مثال، رفت و برگشت ابتدایی، حذف شدهاست و با فرض معلوم بودن کلید اصلی رکورد مدنظر، آنرا وارد سیستم Change Tracking کرده و درنهایت آنرا حذف میکنیم. کار متد Remove در اینجا، علامتگذاری این شیء دارای Id، به صورت EntityState.Deleted است. اکنون میتوان در EF 7.0، روش سومی را نیز به این لیست اضافه کرد که فقط یکبار رفت و برگشت به بانک اطلاعاتی را سبب میشود: await dbContext.Objects.Where(x => x.Id == id).ExecuteDeleteAsync(); معرفی متدهای حذف و بهروز رسانی دستهای رکوردها در EF 7.0 EF 7.0 به همراه دو متد جدید Exe, ...ادامه مطلب
به C# 11، عملگر جدیدی به شکل <<< و به معنای unsigned right shift اضافه شدهاست که ... در زبان جاوا از نگارش ابتدایی آن حضور داشتهاست. اما ... چرا از این لحاظ بین این دو زبان، تفاوت وجود داشتهاست؟ مفهوم عملگر شیفت در #C عملگر شیفت به سمت راست و یا <<، عددی را به تعداد بیت مشخص شده (x >> count)، به سمت راست منتقل میکند و دو نوع دارد: الف) شیفت به راست منطقی برای مثال اگر عدد 12 را به صورت باینری نمایش دهیم، به صورت زیر خواهد بود: 00000000 00000000 00000000 00001100 و اگر آنرا به اندازهی یک بیت به سمت راست هدایت کنیم، که با 1 <<< 12 نمایش داده میشود: 00000000 00000000 00000000 00000110 به عدد 6 خواهیم رسید. در این حالت همواره فرض میشود که عدد مدنظر، unsigned است. ب) شیفت به راست ریاضی شیفت به راست ریاضی، دقیقا مانند شیفت به راست منطقی است؛ مانند مثال زیر که عدد 1001 باینری را دو بیت به سمت راست منتقل میکند: uint e = 0b_1001; Console.WriteLine($"Before: {Convert.ToString(e, toBase: 2),4}"); // Before: 1001 uint f = e >> 2; Console.WriteLine($"After: {Convert.ToString(f, toBase: 2).PadLeft(4, '0'),4}"); // After: 0010 اما ... بجای اینکه همانند شیفت به راست منطقی، سمت چپ را با صفر پر کند، آنرا با «با ارزشترین بیت یا همان بیت علامت» پر میکند. یعنی در اینجا بیتی که بیانگر مثبت و منفی بودن عدد است، حفظ میشود. یعنی این نوع شیفت، با اعداد signed هم کار میکند. برای مثال نمایش باینری عدد منفی 2,147,483,552- به صورت زیر است: 10000000 00000000 00000000 01100000 , ...ادامه مطلب
هر کلاسی در #C که از کلاس پایهی System.Attribute مشتق شود، یک Attribute نامیده میشود و مهمترین و هدف و کاربرد آنها، مزین کردن و علامتگذاری سایر نوعها و فیلدها هستند تا بر اساس آنها بتوان کارکردهای بیشتری را در اختیار آن نوعها قرار داد. برای مثال، استفاده از ویژگیهای JsonProperty و یا JsonPropertyName در حین اعمال serializations و یا در کاربردهای اعتبارسنجی مانند ویژگیهای Required، Range و امثال آنها: public class Student { [JsonPropertyName("id")] public int Id { get; set; } [JsonPropertyName("name")] public string Name { get; set; } } public class WeatherForecast { [Required] public int TemperatureC { get; set; } [MinLength(50)] public string Summary { get; set; } } روش متداول ارسال نوعها به attributes تا پیش از C# 11 تا پیش از C# 11، روش پیاده سازی یک attribute جنریک که بتواند با انواع و اقسام نوعها کار کند، به صورت زیر است: - ارسال یک پارامتر از نوع System.Type به سازندهی attribute - تعریف خاصیتی مانند ParamType در صورت نیاز؛ تا مشخص کند که چه نوعی به سازندهی attribute ارسال شدهاست. مانند مثال فرضی زیر: [AttributeUsage(AttributeTargets.Class)] public class CustomDoNothingAttribute: Attribute { // Note the type parameter in the constructor public CustomDoNothingAttribute(Type t) { ParamType = t; } public Type ParamType { get; } } و سپس با استفاده از عملگر typeof، نوع مدنظر را به سازندهی ویژگی تعریف شده، ارسال میکنیم: [CustomDoNothing(typeof(string))] public class Student { , ...ادامه مطلب
همانطور که انتظار می رود ، شیائومی در تاریخ 13 مه 2020 دومین روتر Wi-Fi 6 خود را با نام Mi Router AX1800 عرضه کرده است. رونمایی از این روتر جدید از طرف کمپانی چینی ، تنها چند ماه پس از رونمایی روتر Mi AIoT Router AX3600 می باشد. برای این روتر جدید AX1800 ، شیائومی طراحی را به کلی تغییر داده و فاکتور شکل برج مانند (بلند و کشیده) را به تصویب رسانده است. با تشکر از این طراحی جدید ، می تواند فضای بیشتری برای ذخیره سازی داشته باشد و همچنین شامل مخزن گرما برای بررسی دمای هوا می باشد. همچنین از آنتن های پرکاربرد دو باند پنهان بهره می برد که هدف آن ارائه یک پوشش سیگنال قوی 360 درجه است. هر دو آنتن محدوده فرکانس - 2.4 گیگاهرتز و 5 گیگاهرتز دارای دو تقویت کننده سیگنال مستقل با عملکرد بالا Qorvo هستند که قدرت سیگنال را با 4dB افزایش می دهند که می بایست 50٪ پوشش را افزایش دهد. روتر Mi Router AX1800 مجهز به 256 گیگابایت رم است و از پشتیبانی شبکه Mesh برای پوشش سیگنال یکپارچه در خانه برخوردار است. روتر Xiaomi Mi Router AX1800 از اتصال حداکثر 128 دستگاه به طور همزمان پشتیبانی می کند. این روترمجهز به چیپست چهار هسته ای Qualcomm APQ6000 با NPU اختصاصی است و از پشتیبانی از فناوری OFDMA (Orthogonal Frequency-Division Multiple Access دسترسی چندگانه به فرکانس-تقسیم متعامد) بهره می برد که به روتر اجازه می دهد تا با استفاده از تنها یک انتقال ، داده را به چندین دستگاه ترمینال ارسال کند. علاوه بر این ، این شرکت می گوید هر زمان که دستگاه های هوشمند جدید شیائومی به شبکه وصل شود ، به طور خودکار با تنظیمات برنامه Mi بدون نیاز به وارد کردن رمز عبور هماهنگ می شود. شیائومی فاش کرد که این روتر جدید Wi-Fi 6 م, ...ادامه مطلب
Jisu Life ، یک شرکت با پشتیبانی شیائومی دو پنکه دستی ارزان قیمت را راه اندازی کرده است تا به مردم کمک کند در طول تابستانها خنک باشند. این پنکه ها در حال حاضر برای فروش در وب سایت تجارت الکترونیکی Xiaomi Youpin در چین آماده فروش هستند. پنکه های دستی جدید Jisu در یک سری قرار می گیرند اما از نظر اندازه و ویژگی های آنها با یکدیگر متفاوت هستند. مدل کوچکتر "نسخه مینی" نام دارد ، در حالی که نوع کمی بزرگتر آن "Jade Edition" نام دارد. هر دو مدل دارای موتورهای جریان مستقیم بدون جاروبک هستند اما نسخه کوچکتر دارای 4 تیغه در مقایسه با 5 تیغه در مدل بزرگتر می باشد. تفاوت دیگر این است که اولی دارای عملکرد آروماتراپی است ، در حالی که دومی می تواند به عنوان پاور بانک استفاده شود. این دو پنکه همچنین دارای 3 نوع تنظیمات سرعت هستند اما نوع Jade Edition 50٪ سریعتر از نسخه Mini است. همچنین ، این مدل از یک باتری 5000 میلی آمپر ساعتی برخلاف مدل کوچکتر که دارای باتری4000 میلی آمپر ساعتی می باشد، برخوردار است. با این حال ، هر دوی آنها به عنوان یک اقدام ایمنی ، دارای صفحات محافظ MOS هستند. علاوه بر این ، پنکه کوچکتر Jisu در ابعاد 87x48x158 میلی متر و دارای وزن 175 گرم می باشد. از طرف دیگر پنکه بزرگتر وزنی برابر با 225 گرم و ابعاد 106x42x198mm دارد. با توجه به عمر باتری ، این برند ادعا می کند پنکه های کوچکتر و بزرگتر در حالت سرعت1 به ترتیب 20 ساعت و 14 ساعت کار می کنند. همچنین برای شارژ کامل از طریق درگاه Micro USB آنها 3-4 ساعت و 4-5 ساعت زمان می برند. [gallery size="full" ids="4826,4824,4823"] از آنجا که پنکه بزرگتر می تواند به عنوان پاور بانک عمل کند ، می توان از آن برای شارژ Xiaomi Mi 10 1.04 بار ،, ...ادامه مطلب