LINQ To SQL چیست؟
LINQ to SQL ابزاری قدرتمند است، که به برنامه نویسان اجازه دسترسی به دیتابیسها را مانند اشیاء در سی شارپ میدهد. با استفاده از LINQ to SQL قادر خواهید بود به جای یادگیری SQL از عملگرهای پرس جوی LINQ و متدهای آن استفاده کنید. LINQ to SQL دارای یک API برای ایجاد و دستکاری دیتابیس میباشد. پرس و جوهای LINQ و فراخوانیهای متدهای API به دستورات SQL تبدیل میشوند، که این دستورات برای ایجاد تغییرات یا دریافت پرس و جوها از بانک اطلاعاتی، اجرا میشوند. LINQ to SQL یکی از روشهای بسیار پیشرفته برای دسترسی به بانک اطلاعاتی توسط سی شارپ و دات نت میباشد .
به این نکته توجه کنید که LINQ to SQL فقط زمانی قابل اجرا است که شما از SQL Server به عنوان دیتابیس استفاده میکنید. دیتابیسی که قرار است در این آموزش مورد استفاده قرار بگیرد دیتابیس Northwind میباشد. اگر نسخه آزاد Visual C# Express را در اختیار دارید لازم است به یک فایل دیتابیس با پسوند .mdf دسترسی داشته باشید. دیتابیس Northwind در صورتی که درست نصب شده باشد در مسیر C:\SQL Server 2000 Sample Databases قرار دارد. برای قابل مشاهده کردن پسوند فایل دیتابیس به Control Panel رفته و از گزینه Folder Options بر روی سربرگ دوم آن یعنی View کلیک و تیک “Hide extensions for known file types” را برداشته و دکمه OK را کلیک نمایید. فایلهای دیتابیسی که در SQL ساخته میشوند از جمله Northwind دارای پسوند .mdf هستند. SQL Server Express 2008 یک پوشه پیشفرض برای ذخیره فایلهای دیتابیس دارد که در مسیر C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data میباشد. از آنجاییکه یک نسخه از دیتابیس Northwind.mdf در این مسیر قرار دارد لازم به ایجاد آن نیست. ویژوال استودیو دارای ابزارهای قدرتمندی برای تولید کلاسهای LINQ to SQL با استفاده از Object Relational Designer میباشد. شما میتوانید به راحتی با ماوس جداول را در این محیط کشیده و رها کنید (drag and drop) تا ویژوال استودیو به طور خودکار کلاسهای لازم برای مرتبط کردن جداول و سطرهای هر جدول خاص و دیتابیس را تولید کند. مشاهده میکنید كه جداول از تعدادي ستون يا فيلد تشكيل شده است، اين ستونها شامل محتواي جدول مورد نظر میباشد. در این محیط فلشهایی هم دیده میشوند که ارتباط بین جداول را نشان میدهند. به شکل زیر توجه کنید :
كلاس ايجاد شده سطرهای هر جدول را به شما نشان میدهد .
به عنوان مثال ما یک جدول به نام Employees داریم. ویژوال استودیو به طور خودکار نام جدول را به شکل مفرد در میآورد و یک شئ با نام Employee ایجاد میکند که نماینده هر سطر یا رکورد جدول مذکور میباشد. یک کلاس متناظر از نوع Table<TEntity> واقع در فضای نامی System.Data.Linq برای هر جدول موجود در محیط LINQ to SQL ایجاد میشود. كار TEntity ساخت يک شیء نظير به نظير میباشد وقتي كه دو جدول مثل هم در يك كلاس داشته باشيد. به عنوان مثال جدول Employees دارای کلاس متناظر Table<Employee> میباشد. براي جلوگيري از خطا در ستون ها و رکوردهای موجود این شیء يك نمونه از جدول مورد نظر میسازد.
Table<TEntity> رابط IQueryable<TEntity> از فضای نام System.Linq را پیاده سازی میکند. وقتی یک عملیات پرس و جوی LINQ یک شیء از این رابط را پیاده سازی می کندو نتایجی از یک دیتابیس را بدست میآورد، نتایج به صورت خودکار در کلاسهای LINQ to SQL ذخیره میشوند.
براي اينكه بتوانيد از كليد داخلي و خارجي در اين محيط استفاده كنيد ابتدا در محيط ويژال استديو بايد ارتباط بين دو جدول را از طريق فیلدهای مشترك ايجاد كنيد براي ايجاد فیلدهای مشترك بهتر است ارتباط از طريق كليد اصلي هر دو جدول انجام شود. با ارتباط دادن دو جدول از طريق فيلدهاي مشترك میتوانید از طريق كليد خارجي به محتويات جدول ارتباط داده شده دسترسي پيدا كنيد.
به عنوان مثال، دو جدول با نامهای Employees و Companies هر دو فیلدی به نام CompanyID دارند. CompanyID کلید اصلی جدول Companies بوده ولی در جدول Employees یک کلید خارجی است که به CompanyID در جدول Companies اشاره دارد.
وقتي كه ويژوال استديو جداول كلاس را میسازد ارتباط آنها را نيز از طريق كليد خارجي مورد بررسي قرار میدهد، كلاس Employee از جدول Employee داري يك ارتباط با جدول Order میباشد، به همين دليل با فلش به هم مرتبط هستند، زمانيكه به اطلاعات جدول Employee نياز داشته باشيم از طريق ستون مشابه (كليد خارجي) به اطلاعات جدول Employee دسترسي خواهيم داشت .
LINQ to SQL کلاس DataContext را که از System.Data.Linq.DataContext ارث بری میکند، ایجاد میکند. این کلاس مسئول اتصال برنامه و دیتابیس است. به ازاي هرگونه تغيير در جداول، اين تغيير در كلاس LINQ to SQL نيز بايد اعمال گردد اين تغييرات بايد به صورتي ايجاد شود كه جداول تغيير يافته جايگزين جداول قبلي شوند.
ویژوال استودیو به طور خودکار یک DataContext در قالب Database> DataContext> ایجاد میکند که در آن<Database> نام جدول میباشد. به عنوان مثال هنگام استفاده از دیتابیس Northwind یک NorthwindDataContext با خواص مربوط به هر جدول ایجاد میشود. این خواص شامل مجموعهای از اشیاء که نماینده سطرهای هر جدول میباشند، هستند. به عنوان مثال کلاس NorthwindDataContext یک خاصیت Employees که مربوط به جدول Employees است، دارد. این خاصیت مجموعهای از اشیاء میباشد که نماینده سطرهای جدول میباشد. در درس بعد با یک مثال نحوه ارتباط با دیتابیس را با استفاده از تکنولوژی LINQ to SQL را آموزش میدهیم.
سلام DATACONTEXT من با پایگاهم ارتباط برقرار نمیکنه وقتی عمل INSERT انجام میدم تو جدول ثبت نمیشه ولی تو DATAGRID نمایش داده میشه.
سلام
توضیحاتتون بسیار عالی بود.
تشکر.
سلام، ممنون بابت لطفتون
سلام.
من یک دیتا بیس درست کردم دارای دو فیلد date هست .یکیشون برای وارد کردن تاریخ روزی که مثلا کالای من ارسال میشه و اون یکی موقع دیافت کالا رو به عنوان دریافت زمان کالا رو تعریف کردم. میخوام تا زمان دریافت کالا اون فیلد خالی بمونه که مشکلی با برنامه نویسی ندارم یا کلا به برنامه نویسی خاصی نیاز نداره.
من میخوام که این تاریخ ها رو خودم توی یک تکس باکس بنویسم ولی مشکل اینجاست که تکس باکس رشته ای یا string هست و برنامه خطا میگیره. میشه کمکم کنید که چه کدی در تکس باکس بنویسم که تاریخ رو توسط خودم وارد کنم و مشکلی برای دریافت تاریخ توسط کاربر نداشته باشه… از تکنلوژی LINQ TO SQL هم دارم برا پروژه ام استفاده میکنم.
با سلام
درمورد سوال شما دو راه وجود داره كه باهم بررسي مي كنيم :
1- نوع داده اي كه در جدول تعريف كردين از نوع Date هست ، و وقتي مي خواين ثبتش كنيد
بايدمقدار تكس باكس يا ماسك تكس باكس رو به نوع Date تبديل كنيد با استفاده از دستور زير :
DateSend= Convert.ToDateTime(maskedTextSent.Text);
اما مشكلي كه به وجود مياد تاريخ ها برعكس ثبت ميشن كه بايد به تاريخ شمسي تبديل شون كنيد .
اما راه دوم بياييد از نوع nvarchar تاريخ هاي خودتون رو در نظر بگيرين ، با اين كار نيازي به تبديل تاريخ نخواهيد داشت و تاريخ ها به صورت فارسي ثبت خواهند شد .
آموزش تصويري هم به ايميل شما فرستاده شد .
بازم سوالي داشتين برام ايميل كنيد .