PDA

View Full Version : گفتگو: بازهم مشکل تاریخ این بار در LINQ TO SQL



Mostafa_Dindar
چهارشنبه 09 تیر 1389, 11:53 صبح
سلام

قبلا (درست يا غلط) برای نمایش تاریخ فارسی در UI به اين صورت عمل ميكردم كه به ازاي هر فيلد از نوع تاريخ در ديتابيس ، كه يك Property هم از نوع تاريخ در Bussiness Object خودم داشتم يك فيلد از نوع رشته ميگرفتم و در Getter آن توسط يك متد Utility آن را به رشته فارسي تبديل ميكردم .
در این حالت در کنترلهای داده که به کلاس متناظر بایند میشد یک فیلد اضافه تر از نوع رشته ای ولی تاریخ فارسی داشتم و فیلد تاریخ میلادی رو Exclude میکردم .

مثال

private DateTime _insertDate;
/// <summary>
/// تاریخ درج
/// </summary>
public DateTime InsertDate
{
get { return _insertDate; }
set { _insertDate = value; }
}

// اين فيلد در ديتابيس وجود ندارد و از نوع رشته است ، اين فيلد به كنترلهاي رابط كاربر بايند ميشود
public string PInsertDate
{
get { return FarsiCalendar.ToPersianDate(_insertDate); }
}


حال من نميدونم در LINQ To SQL چطور اين كار ( يا روش بهتري كه شما پيشنهاد ميكنيد ) را پياده سازي كنم .
نکته ای که به ذهنم رسید , یک فیلد دیگر به Entity خودم در فایل dbml اضافه کنم به صورت ReadOnly , و در آنجا در Getter فیلد مورد نظر از نوع DateTime رو به رشته ای از نوع تاریخ فارسی تبدیل کنم .

ولی در RunTime همیشه با خطای Invalid column name مواجه میشم .

اصولا شما برای تبدیل تاریخ میلادی که در دیتابیس هست , برای نمایش به کاربر در Linq to Sql از چه راهی استفاده میکنید. یا برای من چه راه حلی رو پیشنهاد میکنید ؟

پیشاپیش از توجه شما ممنونم .

Mostafa_Dindar
چهارشنبه 09 تیر 1389, 13:21 عصر
مشکلم رو تونستم حل کنم .

جهت اطلاع مثل پست بالا عمل کردم منتهی باید Attribute های فیلد جدید را حذف کنید .

Behrouz_Rad
چهارشنبه 09 تیر 1389, 13:33 عصر
به نظر من بهتره چیزهایی که قصد دارید به dbml اضافه کنید رو در یک کلاس partial قرار بدید. کلاسی که L2S ایجاد می کنه partial هست و دست برنامه نویس رو برای توسعه ی کلاس تولیدی باز میگذاره.
یک دلیل خوب برای این کار وجود داره... اگر کوچکترین تغییری در Schema ی دیتابیس بدی و dbml رو مجدداً Rebuild کنی، Property ها و متدهایی که اضافه کردی از بین میرن. اما در صورتی که متعلقات اضافه ی کلاس رو در یک کلاس partial قرار بدی همیشه اونها رو داری.

موفق باشید.

Mostafa_Dindar
چهارشنبه 09 تیر 1389, 14:00 عصر
آقای راد نظر شما درباره اینکه Data Type رو در دیتابیس از نوع char(10) بگیریم چی هست , من دیدم عده ای از این روش استفاده میکنند و با تاریخ همیشه به صورت رشته کار میکنند .

این روش چه مزایایی ( و یا معایب ) داره ؟

Behrouz_Rad
چهارشنبه 09 تیر 1389, 14:47 عصر
آقای راد نظر شما درباره اینکه Data Type رو در دیتابیس از نوع char(10) بگیریم چی هست , من دیدم عده ای از این روش استفاده میکنند و با تاریخ همیشه به صورت رشته کار میکنند .

این روش چه مزایایی ( و یا معایب ) داره ؟
تاریخ باید از نوع datetime باشه و با فرمت میلادی ذخیره بشه. SQL Server به صورت Native برای تاریخ میلادی بهینه شده و به راحتی میشه بر روی این نوع Data Type کوئری زد. هر چند که قبلاً دیدم که یکی از دوستان Date Type فارسی رو برای SQL Server ایجاد کرده بود اما نیاز به Deploy در SQL Server دارید که Server این اجازه رو نمیده.

موفق باشید.