ADO.NET Entity Framework (EF)

یکی از ابزارهای قدرتمند .NET برای تولید نرم افزارهایی که با دیتابیس سرو کار دارند ADO.NET Entity Framework یا EF است. EF به شما کمک میکند که سریعتر و راحتتر و مطمئن تر با دیتابیس کار کنید و در صورت تغییر دیزاین دیتابیس تقریبا هیچ زحمت اضافه ای نکشید.
احتمالا همه شما با معماری سه لایه Data/Business/UI آشنایی دارید. برای استفاده از EF پیشنهاد میشود که از معماری سه لایه Model/View/Controller استفاده کنید. در این معماری View معادل UI است، Controller معادل Business و Model معادل Data. اما تفاوت بزرگ آن با معماری قبلی در این است که در معماری قبلی ValueObject (کتابخانه ای که در آن تمام کلاسهای پایه ی سیستم تعریف شده اند، مثل مشتری، محصول، ...) جزئی از Business بود که Reference آن هم در UI موجود بود و هم در DataAccess. اما در این معماری ValueObject جزئی از Model خواهد بود و به ناچار Reference پروژه ی Model را باید در تمام پروژه هایی که با ValueObject سروکار دارند اضافه کنیم. این امر باعث زیر پا گذاشتن Encapsulation میشود زیرا مثلا وقتی Reference پروژه ی Model در View اد شود، از طریق View میتوانید مستقیما در دیتابیس تغییر ایجاد کنید. اما در ادامه خواهید دید که آنچنان هم بد نیست!
1.        ابتدا EF را روی .NET خود نصب کنید.
2.        یک Class Library به Solution خود اضافه کنید.
3.        از طریق Add new item یک ADO.NET Entity Data Model را به پروژه ی Class Library اضافه کنید.
4.        در پنجره ای که ظاهر میشود تعیین کنید که آیا دیتابیس را از اول میخواهید بسازید یا که میخواهید از دیتابیس موجود استفاده کنید. (ساختن دیتابیس از اول از طریق Entity Data Model ساده تر و مطمئن تر است. زیرا اگر دیتابیس موجود استفاده کنید تعداد زیادی Binding باید انجام دهید.)
5.        مشخصات لازم را وارد کنید تا Wizard کارش تمام شود. (من برای ایجاد فایل از نام پیش فرض Model1 استفاده کردم)
6.        حال یک صفحه سفید میبیند که نامش بصورت *.edmx است(مثلا Model1.edmx). این فایل Entity Data Model نام دارد که معادل همان Class Diagram یا Domain Model یا Database Diagram است. در EF به هر کلاس EntitySet گفته میشود که هم کار Table را انجام میدهد و هم کار Class. هر نمونه از EntitySet یک Entity نام دارد که هم کار Row را انجام میدهد و هم کار Object (یا instance) را. البته همه به جای EntitySet از کلمه Entity استفاده میکنند. (هرجا Entity گفتیم منظورمان EntitySet است)
7.        از طریق toolbox، Entity ها و Association های موردنظر خود را تولید کنید. (به دلیل سادگی، توضیح بیشتر لازم ندارد. کافیست روی Entity ها و Association ها کلیک کنید و Properties آنها را ببینید)
8.        بعد از اتمام کار، روی صفحه رایت کلیک کنید و Generate Database from Model را انتخاب کنید تا فایل دیتابیس آپدیت یا ساخته شود.
9.        دوباره روی صفحه رایت کلیک کنید و Add Code Generation Item را انتخاب کنید تا تمامی کلاسهای مربوطه ساخته شوند. در صفحه ای که باز میشود یک Generator (من از DbContext Generator استفاده میکنم) انتخاب کنید.
10.     حال در کد خود کافیست یه نمونه از کلاس Model1Container بسازید. از طریق آن میتوانید به دیتابیس دسترسی داشته باشید.

Model1Container m = new Model1Container();

...

Entity1 e1 = new Entity1();
e1.Name = "mammad";
if (m.Entity1.Any())
    e1.PersonelId = m.Entity1.Last().PersonelId + 1;
else
    e1.PersonelId = 1;
m.Entity1.Add(e1);
m.SaveChanges();


2D Game Programming with XNA Framework

XNA Framework یکی از محصولات مایکروسافته مخصوص ساخت بازی کامپیوتری توی محیط .NET
خیلی سریع اصول طراحی یک بازی دوبعدیو میگم. بقیه ش با خودتون. یک پروژه از نوع Windows Game ساختم و اسمشو گذاشتم MyGame. توی پروژه ی MyGame از همون اول، بجای Class1 که همیشه خود بخود ساخته میشه، یه کلاس دارید به اسم Game1 که توی اون 5 تا تابع وجود داره:
1.         Initialize()
هر چیزی که اول بازی باید مقدار دهی بشه اینجا قرار میگیره. البته بجز اجزای گرافیکی صفحه مثل Texture ها و Sprite ها.
مثلا:
this.IsMouseVisible = true;
map = new Map(128, 128, Difficulty.Easy);

2.         LoadContent()
حالا باید Texture دوبعدی تعریف کنید. فایل عکسی که برای Texture استفاده میکنید ترجیحا PNG باشه که زمینه اش Transparent باشه. (مثلا فایل image001.png)  توی Solution Explorer این عکسو به MyGameContent اضافه کنید و بعد توی LoadContent اونو توی بازی Load کنید.
مثلا:
//In the Game1 Class Body
private Texture2D playerTexture;
private
SpriteFont font1;
//Inside LoadContent
playerTexture = this.Content.Load<Texture2D>("image001");
font1 = Content.Load<SpriteFont>("SpriteFont1");

3.         UnloadContent()
اگر تعداد Content های بازی (عکس، موزیک، فونت، افکت...) زیاد باشه و با عوض شدن مرحله بخواهید اونا رو Unload کنید از این تابع استفاده کنید. یه چیزی شبیه به Dispose هستش.

4.         Update(GameTime gameTime)
5.         Draw(GameTime gameTime)

تمام منطق برنامه در تابع Update مدیریت میشه. از قبیل تشخیص Collision یا کلیدهایی که فشار داده شده اند یا Health بازیکن... تابع Update و Draw به نوبت اجرا میشن. توی Update مختصات Texture ها و اندازه و Tintشون تعیین میشه و توی Draw تمام Textureهایی که باید نمایش داده بشن نمایش داده میشن. نشون دادن متن یا پخش آهنگ هم در Draw انجام میشه. البته میشه که همه ی منطق برنامه رو توی Draw نوشت ولی باید توجه داشت که این دو تابع هر کدوم واسه کاربرد خودشون طراحی و بهینه سازی شدن و اگه منطق و گرافیک درست تفکیک نشن ممکنه Performance برنامه بیاد پایین.
//Update
if (Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Space))
    Player.State = PlayerState.Jump;

//Draw
GraphicsDevice.Clear(Color.CornflowerBlue); //if you remove this line, screen won’t refresh
spriteBatch.Begin();//like From1.SuspendLayout in WindowsFromApplication
spriteBatch.DrawString(font1, "Press space to jump!", new Vector2(10,10), Color.DarkRed);
spriteBatch.Draw(playerTexture, new Vector2(200,200), Color.White); //White means: no tint
spriteBatch.End();//like From1.ResumeLayout in WindowsFromApplication








لینک دانلود XNA SDK برای .NET Framework 3.1
لینک دانلود XNA SDK برای .NET Framework 4