PDA

View Full Version : سوال: ميشه توي برنامه در زمان اجرا property تعريف كرد؟



combo_ci
سه شنبه 24 اردیبهشت 1387, 06:23 صبح
سلام
كسي ميدونه چطوري ميشه توي برنامه در زمان اجرا property تعريف كرد؟

رضا عربلو
سه شنبه 24 اردیبهشت 1387, 18:13 عصر
چه کاری می خواهی انجام دهی. شاید مشکلت با System.Collections.Generic.Dictionary حل شود

mohammad272005
سه شنبه 24 اردیبهشت 1387, 18:34 عصر
در صورت امكان متن مشكلو كامل بگو. شايد اصلا راه حل ايجاد property نباشه.

combo_ci
چهارشنبه 25 اردیبهشت 1387, 19:50 عصر
يه كلاس براي كار با database نوشتم...حالا ميخوام در زمان اجرا به object كه از اوون كلاس ميگرم اسم يك table رو پاس بدم و داخل اوون كلاس به اسم فيلد هاي اوون table به كلاس به صورت dynamic اضافه بشه....نحوه بدست اوردن فيلدهاي يك جدول رو با استفاده از query بدست آوردم اما نميدونم چطوري اونا رو به صورت property در زمان اجرا به كلاسم اضافه كنم

رضا عربلو
چهارشنبه 25 اردیبهشت 1387, 20:24 عصر
مسلم بدان که نمی توان در زمان اجرا یک member به یک کلاس اضافه کرد چرا که اگر این طور بود حتماً مایکروسافت در دیتاست اش (untyped dataset) این کار را انجام می داد.
بهترین روش برای شبیه سازی این خواسته شما همان کاری است که دیتاست انجام می دهد یعنی استفاده از یک کالکشن.

hdv212
پنج شنبه 26 اردیبهشت 1387, 00:59 صبح
برای این کار نیاز به تولید و Generate کردن کد در RunTime به وسیله ی System.CodeDom داری، لطفا به اولین لینک امضای من مراجعه کن، ابزاری نوشتم که کلیه ی جداول دیتابیست رو به صورت کلاس بندی شده تولید و حتی اسمبلی اونو بهت میده، اطلاعات بیشتر رو در خود تاپیک بخون، لطفا آخرین نسخه رو کپی کن.

mohammad272005
پنج شنبه 26 اردیبهشت 1387, 03:32 صبح
البته راهي كه دوستم hdv212 (http://barnamenevis.org/forum/member.php?u=14084) ميگن درسته ولي اگه از C# 3 استفاده ميكني DataContext كه از ابزارهاي خود VS 2008 هم هست اينكارو ميكنه. يعني شما db رو بهش ميدي يه سري كلاس درست ميكنه كه هركدوم نماينده يه table از db هستن و حاضر و آماده براي استفاده شما هيچ كاري جز استفاده، لازم نيست انجام بدي. اگه هم از C# 2 استفاده ميكني بازم راه داره ابزارهايي مثل PDS هست كه تو اينترنت پيدا ميشه كه خيلي شبيه به DataContext كار مي كنه. PDS يا Persistent DataSet هم از شما db رو ميگيره و classهاي متناظر با tableها ميسازه.

اَرژنگ
پنج شنبه 26 اردیبهشت 1387, 06:42 صبح
يه كلاس براي كار با database نوشتم...حالا ميخوام در زمان اجرا به object كه از اوون كلاس ميگرم اسم يك table رو پاس بدم و داخل اوون كلاس به اسم فيلد هاي اوون table به كلاس به صورت dynamic اضافه بشه....نحوه بدست اوردن فيلدهاي يك جدول رو با استفاده از query بدست آوردم اما نميدونم چطوري اونا رو به صورت property در زمان اجرا به كلاسم اضافه كنم

دیگر این روش قدیمی شده، روش جدید استفاده از LINQ است

mohammad272005
پنج شنبه 26 اردیبهشت 1387, 22:52 عصر
البته LINQ به معناي Language Integrated Query، در اصطلاح به queryي گفته ميشه كه در دل يك زبان ديگه باشه. شما بعد از ايجاد يه DataContext مي تونيد براي مثال (نه به عنوان تنها راه) به اين كلاسها دسترسي پيدا كنيد.

hdv212
جمعه 27 اردیبهشت 1387, 01:05 صبح
به عنوان پیشرفته ترین متد در برنامه نویسی دیتابیس،نظر من، استفاده از Linq به همراه DataContext هست، در ضمن در Visual Studio 2008 دو ابزار وجود داره که میتونه کلیه ی جداول یا حتی Viewها و یا حتی Sp ها رو برای شما Generate کنه :

1. اضافه کردن آیتمی به نام Linq to Sql Classes هست که پس اضافه کردن اون به محیط برنامه نویسی و ایجاد یک DataSource، میتونید جداول رو توی اون بکشید تا کدش رو براتون تولید کنه، همینطور برای تولید کد برای Spها میتونید اونا رو به قسمت دیگه محیط مورد نظر بکشید.

2. راه دوم استفاده از SqlMetal.exe هست که از طریق پارامترهای خط فرمان اجرا میشه، بدین صورت :

sqlmetal.exe /server:. /database:northwind /code:Northwind.cs /sprocs
اگر Visual Studio 2008 Command Prompt رو اجرا کنید و کد بالا رو توش اجرا کنید، کلیه ی آبجکت های مشخص شده در دیتابیس Northwind (در اینجا جداول و Spها) به صورت کد سی شارپ اسخراج و در مسیر

<YourDrive>:\Program Files\Microsoft Visual Studio 9.0\VC
ذخیره میشه که بایستی اونو به پروژه تون اضافه کنید.

linux
جمعه 27 اردیبهشت 1387, 11:36 صبح
يه كلاس براي كار با database نوشتم...حالا ميخوام در زمان اجرا به object كه از اوون كلاس ميگرم اسم يك table رو پاس بدم و داخل اوون كلاس به اسم فيلد هاي اوون table به كلاس به صورت dynamic اضافه بشه....نحوه بدست اوردن فيلدهاي يك جدول رو با استفاده از query بدست آوردم اما نميدونم چطوري اونا رو به صورت property در زمان اجرا به كلاسم اضافه كنم
در پستهایی که قبلا دیده بودم بحثی بود در مورد design paterns یکی هم بود برای دکوریت کردن شاید آن به دردت بخوره