The document has no pages.
پاسخ به بازخوردهای پروژهها
نسخه رو ارتقا دادم و کدهای html رو هم به xhtml تغییر دادم .. ولی باز هم این خطا رو دریافت میکنم :
افزونه های SQL Server Reporting Services Projects و RDLC Report Designer که جدیدا توسط مایکروسافت به صورت افزونه ای که میتوان به Visual Studio 2022 اضافه کرد، ارائه شده است.
با تشکر به خاطر مطلب مفیدی که منتشر کردید.
مشکلی که به آن برخوردم این است که افزونه به خوبی در پروژه اصلی بار گذاری میشود ولی متد RegisterArea مربوط به Area موجود در افزونه اجرا نمیشود .
اگر به Entity data model wizard در VS.Net 2010 دقت کرده باشید، گزینهی "Pluralize or singularize generated object names" نیز به آن اضافه شده است:
این مورد از این جهت حائز اهمیت است که عموما نام جداول در بانک اطلاعاتی، جمع است و نام کلاس متناظر ایجاد شده برای آن در کدهای برنامه بهتر است مفرد باشد. برای مثال نام جدول، Customers است و نام کلاس آن بهتر است Customer تعریف گردد. به این صورت کار کردن با آن توسط یک ORM با معناتر خواهد بود؛ زیرا زمانیکه یک وهله از شیء Customer ایجاد میشود، فقط یک رکورد از بانک اطلاعاتی مد نظر است؛ در حالیکه یک جدول مجموعهای است از رکوردها.
زبان انگلیسی هم پر است از اسامی جمع و مفرد باقاعده و بیقاعده و کل عملیات با اضافه و حذف کردن یک s و یا es پایان نمییابد؛ برای مثال phenomenon و phenomena را در نظر بگیرد تا Money و Moneys.
این امکان مهیا شده توسط Entity Framework 4.0 یا همان EF v2 با برنامه نویسی هم قابل دسترسی است و در اسمبلی System.Data.Entity.Design.dll و فضای نام System.Data.Entity.Design.PluralizationServices قرار گرفته است.
این اسمبلی جزیی از دات نت 4 است و اگر آنرا توسط گزینهی Add references در VS.NET مشاهده نمیکنید، علت آن است که در تنظیمات پروژه جاری، گزینهی Target framework بر روی Client profile قرار گرفته است که باید به دات نت 4 کامل تغییر یابد.
استفاده از آن هم به صورت زیر است:
using System;
using System.Data.Entity.Design.PluralizationServices;
using System.Globalization;
namespace PluralizationServicesTest
{
class Program
{
static void Main(string[] args)
{
var service = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en"));
Console.WriteLine(service.Pluralize("mouse"));
Console.WriteLine(service.IsPlural("phenomena"));
}
}
}
ملاحظات:
این روش فعلا به زبان انگلیسی محدود است و اگر Culture را به مورد دیگری تنظیم کنید با خطای "We don't support locales other than English yet" متوقف خواهید شد.
روش دیگر:
کتابخانهی سورس باز Castle ActiveRecord نیز دارای کلاسی است به نام Inflector که برای همین منظور طراحی شده است:
کاربرد آن در Fluent NHibernate
در Fluent NHibernate کار نگاشت کلاسها به جداول به صورت خودکار صورت میگیرد و همچنین تولید ساختار بانک اطلاعاتی نیز به همین نحو میباشد. اما میتوان تولید نام جداول را سفارشی نیز نمود. برای مثال از کلاس Book به صورت خودکار ساختار جدولی به نام Books را تولید کند:
using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.Instances;
using NHibernate.Helper.Toolkit;
namespace NHibernate.Helper.MappingConventions
{
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
instance.Table(Inflector.Pluralize(instance.EntityType.Name));
}
}
}
... = new AutoPersistenceModel()
.Where(...)
.Conventions.Setup(c =>c.Add<TableNameConvention>())
.AddEntityAssembly(...)
...
در Entity Framework بیشتر استثناها تودرتو هستند و ما باید تمام استثناها رو بررسی کنیم تا به پیغام اصلی خطا برسیم. با استفاده از تکه کد زیر به راحتی میتونیم استثناها رو پیمایش کنیم و متن خطا را مشخص کنیم.
catch (Exception ex) { StringBuilder errorMsg = new StringBuilder(); for (Exception current = ex; current != null; current = current.InnerException) { if (errorMsg.Length > 0) errorMsg.Append("\n"); errorMsg.Append(current.Message.Replace("See the inner exception for details.", string.Empty)); } // log errorMsg.ToString(); }
برای استفاده در قسمتهای مختلف برنامه یک متد الحاقی مانند زیر تعریف میکنیم:
public static string ExceptionToString(this Exception ex) { StringBuilder errorMsg = new StringBuilder(); for (Exception current = ex; current != null; current = current.InnerException) { if (errorMsg.Length > 0) errorMsg.Append("\n"); errorMsg.Append(current.Message. Replace("See the inner exception for details.", string.Empty)); } return errorMsg.ToString(); }
catch (Exception ex) { // log ex.ExceptionToString(); }
یک نکتهی تکمیلی: اکثر مشکلات گزارش شدهی CSP، ناشی از افزونههای کاربران هستند!
اگر CSP را بر روی سایت خود فعال کنید و گزارشات رسیدهی آنرا بررسی کنید، بیش از همهچیز، به خطاهایی مانند گزارش زیر خواهید رسید:
{ "csp-report":{ "blocked-uri":"inline", "column-number":74344, "disposition":"enforce", "document-uri":"https://www.dntips.ir/news/details/19227", "effective-directive":"script-src-elem", "line-number":1, "referrer":"https://www.dntips.ir/", "source-file":"moz-extension", "status-code":200, "violated-directive":"script-src-elem" } }
این خطاها، ناشی از دستکاری محتوای صفحه، توسط افزونههای ثالث نصب شدهی در مرورگرهاست! برای مثال افزونهای را نصب کردهاند تا فونت پیشفرض صفحه را تغییر دهد که به دلیل فعال بودن CSP، توسط مرورگر برگشت زده میشود. لیستی از مواردی را که میتوانید در این زمینه انتظار داشته باشید، در اینجا قابل مطالعه هستند.
اشتراکها
پایان عمر LightSwitch
اشتراکها