[h=1][/h] چندی پیش به همراه همکار محترم ما آقای رحیمی در فکر ساختن یک پراپرتی جنریتور افتادیم همان طور که می دانید در پروژه هایی کا با جداول و فیلد های زیادی سروکار دارند یکی از مسایل وقت گیر ایجاد پراپرتی هاست البته اگه بخواهیم پروزه را اصولی تولید کنیم برای اینکار ما از روش زیر استفاده کردیم در ابتدا بر اساس دیتابیس مان لیست جداول را گرفتیم و سپس برا اساس فیلدهای هر جدول پراپرتی های آنرا تولید کردیم ما برای این کار ابتدا دو تا sp تولید کردیم : 1- شما با قطعه کد زیر در sql قادر خواهید بود که لیست جداول یک بانک را بدست آورید: پروسيجر مربوط به برگرداندن ليست جداول CREATE PROCEDURE [dbo].[GetTables] AS BEGIN select table_name from INFORMATION_SCHEMA.tables where TABLE_TYPE = 'BASE TABLE' END 2. سپس براساس جدول که به کد زير پاس خواهد شد ليست فيلد ها را بدست خواهيم آورد. برگرداندن ليست فيلدها بر اساس جدولي که به آن شوت شده است CREATE PROCEDURE [dbo].[GetFields](@TableName nvarchar(50)) AS BEGIN SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE type = 'U' AND [NAME] = @TableName) END 3. سپس یک فایل از نوع LINQTOSQLClasses.dbml به پروژه اضافه کردیم و استور پروسیجر های ساخته شده را به آن اضافه کردیم 4. فرمی ایجاد کردیم با کلیک روی یک دکمه لیست جداول را دریک combobox نمایش و با انتخاب هریک از جداول لیست پراپرتی های آن را دریک richtexbox نمایش میدهیم ما با اینکار دیگر از شر کار خسته کننده و البته تکراری تولید پراپرتی نجات پیدا کردیم کد داخل پروژه DataClasses1DataContext conx = new DataClasses1DataContext(); SqlConnection con; public Form1() { InitializeComponent(); con = new SqlConnection(@"Data Source=نام سرور شما;Initial Catalog=نام بانک;Persist Security Info=True;User ID=sa ; password=***"); } private void btnShowTables_Click(object sender, EventArgs e) { var result = from item in conx.GetTables() select item; foreach (var item in result) { comboBox1.Items.Add(item); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { var result = from item in conx.GetFields(comboBox1.Text) select item; richTextBox1.Text = GetProperties().ToString(); } public StringBuilder GetProperties() { StringBuilder sb = new StringBuilder(); SqlCommand cmd = new SqlCommand("[sp_help]", con); cmd.Parameters.AddWithValue("@objname", comboBox1.Text); cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds=new DataSet(); da.Fill(ds); foreach (DataRow item in ds.Tables[1].Rows) { sb.Append("public "); if (item[1].ToString() == "nvarchar") sb.Append("string "); else if (item[1].ToString() == "int") sb.Append("int "); else if (item[1].ToString() == "datetime") sb.Append("DateTime "); else if (item[1].ToString() == "varbinary") sb.Append("byte[] "); else if (item[1].ToString() == "float") sb.Append("double "); else if (item[1].ToString() == "bit") sb.Append("bool "); sb.Append(item[0]); sb.Append(" { get; set; } "); sb.Append("n"); } return sb; } دوستان همان طور که در بالا مشاهده می کنید برای گرفتن دیتا تایپ فیلدها ما از یه پرویسجر سیستمی خود sql server به نام [sp_help] استفاده کرده ایم و بر اساس نوع sql ی آن نوع دات نتی را تولید کرده ایم. همان طور که مشاهده می کنید این ابزار رو میشه از این نیز سفارشی تر کرد و بنده خودم در صورت وقت و نیاز این کار را خواهم کرد. دوستان می توانند فایل پروژه را از لینک زیر دانلود کنند. http://108306.20upload.net/files/sh5/12863605211.rar