void ExportMappings(DbContext context, string edmxFile) { var settings = new XmlWriterSettings { Indent = true }; using (XmlWriter writer = XmlWriter.Create(edmxFile, settings)) { System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(context, writer); } }
آشنایی با Refactoring - قسمت 9
یک نکتهی تکمیلی: غنی سازی کامپایلر سیشارپ جهت نمایش اخطارهایی در مورد متدهایی بیش از اندازه پیچیده
پس از فعالسازی یکسری از آنالایزرها، اکنون میتوان بررسی cyclomatic complexity را هم به آنها سپرد. برای اینکار باید مراحل زیر طی شوند:
ابتدا یک سطر زیر را به فایل editorconfig. اضافه کنید:
dotnet_diagnostic.CA1502.severity = warning
سپس فایل جدید CodeMetricsConfig.txt را به ریشهی پروژه اضافه کرده و سطر زیر را به آن اضافه کنید:
CA1502: 20
مقدار پیشفرض آستانهی گزارش خطا در اینجا، 25 است که به روش فوق، قابل بازنویسی است.
البته نیاز است این فایل را به صورت یک فایل اضافی، به فایل csproj. نیز معرفی کرد:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt"/> </ItemGroup>
همچنین میتوان تنظیمات آستانهی ریزتری را هم به متدها، نوعها و غیره اعمال کرد:
CA1505(Method): 5 CA1505(Type): 15
مقادیر مجاز در اینجا، شامل SymbolKind, Assembly, Namespace, Type, Method, Field, Event,Property هستند.
در این فایل میتوان آستانهی گزارش خطای موارد زیر را هم بازنویسی کرد:
CA1501: Avoid excessive inheritance CA1502: Avoid excessive complexity (this one) CA1505: Avoid unmaintainable code CA1506: Avoid excessive class coupling
Mvc File Manager
Admin (Full access) FileManager_Read(readonly access) FileManager_Write(Creat Folder & upload file) FileManager_Change(Move & Rename) FileManager_Delete(Delete file and Folder
باید عرض کنم بله وقتی کاربری یافت نشد چه کاری میتوانیم انجام دهیم؟
Errors should be handled via exceptions, but successes shouldn't
The typical meaning of the word "exception" is an event that is unexpected rather than part of normal operation; otherwise people would just say "event"
Methods should have a way to indicate various kinds of results. Whether those results are treated as exceptional should depend on the caller.
EF Code First #14
برای مطالعه بیشتر:
Databinding with WPF
Databinding with WinForms
EF Code First #14
- Added مربوط به زمانی است که اطلاعات به سیستم ردیابی (context در اینجا) اضافه شده و نه به بانک اطلاعاتی. Modified مربوط به حالتی است که اطلاعات تحت نظر سیستم ردیابی مثلا یک خاصیت آن تغییر کرده است؛ پیش از ذخیره سازی در بانک اطلاعاتی. EF بر همین اساس هست که تشخیص میده چه کوئری را باید صادر کند برای ذخیره یا به روز رسانی نهایی اطلاعات.
تاریخ شمسی با Extension Method برای DateTime
کنترل DatePicker شمسی مخصوص Silverlight 4
ممکنه یکبار نحوه استفاده رو توی wpf کامل توضیح بدید؟
من این کارهارو میکنم:
1 - add>usercontrol> wpf
2- add کردن dll به toolBox
3- drag کردن pdatepicker توی usercontrol و rebuild کلی پروژه
4- اضافه کردن elementhost به فرم
5- انتخاب usercontrol به elementhost
موقع اجرا تقویم رو توی فرم نشون میده ولی وقتی میخوام تاریخ رو ازش انتخاب بکنم
Error:
object reference is not set to an object
use new keyword ....
آشنایی با الگوی MVVM
حدود یک سال قبل الگوی MVVM زیاد معروف نبود (Model-View-ViewModel pattern). اما در 6 ماه اخیر، این الگو به یک متدولوژی جدی توسعه برنامههای WPF و سیلورلایت تبدیل شده. نمیشود به یک وبلاگ خوب WPF سر زد و خبری از این روش نباشد. حتی فریم ورکهایی هم برای آن طراحی شده که لیست آنها را در این مقاله میتوانید مشاهده نمائید.
مزایای این الگو چیست؟
- جدا سازی Model و View
- تولید کدهایی با قابلیت تست بالا
- فایلهای code-behind ایی با حداقل کد
اگر علاقمند به آشنایی با این الگوی طراحی باشید ویدیوی آموزشی زیر در طی یک ساعت و نیم به توضیح این مطلب پرداخته است.
ماخذ
گاهی از اوقات قبل از درگیر شدن با کاربران (!)، بهتر است حداکثر اندازه مجاز فایل قابل ارسال به سرور را به آنها نمایش داد. درغیراینصورت باید پاسخگوی این باشید که چرا فایل 100 مگابایتی که من ارسال کردم، ذخیره نشده و برنامه کار نمیکنه!
خطای دریافتی این خواهد بود: Maximum request length exceeded
در ASP.Net اگر هیچ تنظیم خاصی صورت نگرفته باشد، حداکثر اندازه فایل قابل ارسال به سرور، 4 مگابایت است. این مورد را در machine.config و یا در web.config میتوان تغییر داد.
برای مثال، جهت بالا بردن اندازه فایل قابل ارسال به سرور در وب کانفیگ برنامه به 39 مگابایت، میتوان سطر زیر را به قسمت system.web اضافه کرد.
<httpRuntime executionTimeout="1200" maxRequestLength="39936" />
اما یک نکته را هم باید درنظر داشت. اگر هاست مورد استفاده شما فایل machine.config را قفل کرده باشد (که از لحاظ امنیتی توصیه میشود)، سطر فوق در web.config هیچ تاثیری نخواهد داشت.
به همین منظور کلاس زیر را تهیه کردهام که تمامی این موارد را لحاظ میکند.
ابتدا مقدار پیش فرض 4 مگابایت درنظر گرفته خواهد شد.
سپس سعی میشود که مقدار مجاز MaxRequestLength از فایل machine.config خوانده شود. همچنین وضعیت قفل بودن آن نیز دریافت میشود.
اگر این قسمت قابل خواندن بود و همچنین قفل نشده بود، مقدار تنظیم شده maxRequestLength در وب کانفیگ، دریافت و استفاده خواهد شد.
و در آخر، اندازه دریافتی، که بر اساس KB است به شکلی قابل خواندن بازگشت داده میشود.
using System;
using System.Configuration;
using System.Web.Configuration;
/// <summary>
/// کلاسی جهت نمایش اندازه مجاز فایل قابل ارسال به سرور
/// </summary>
public class CMaxLimit
{
/// <summary>
/// اندازه مجاز فایل قابل ارسال به سرور
/// </summary>
/// <returns></returns>
public static string MaxFileUploadSizeLimit()
{
//مقدار پیش فرض
int resultKB = 4096;
//machine.config
Configuration mConfig =
WebConfigurationManager.OpenMachineConfiguration();
bool mConfigIsLocked = false;
HttpRuntimeSection section =
mConfig.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (section != null)
{
resultKB = section.MaxRequestLength;
mConfigIsLocked = section.ElementInformation.IsLocked;
}
//web.config
if (!mConfigIsLocked)
{
HttpRuntimeSection httpRuntimeSection =
WebConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (httpRuntimeSection != null)
{
resultKB = httpRuntimeSection.MaxRequestLength;
}
}
return
SizeToString(resultKB * 1024);
}
/// <summary>
/// نمایش اندازه یک فایل به صورتی قابل درک
/// </summary>
/// <param name="len">اندازه فایل</param>
/// <returns></returns>
public static string SizeToString(long len)
{
int order = 0;
string[] sizes = new[] { "B", "KB", "MB", "GB" };
while (len >= 1024 && order + 1 < sizes.Length)
{
order++;
len = len / 1024;
}
return String.Format("{0:0.##} {1}", len, sizes[order]);
}
}