Entity Framework در Xamarin
سه شنبه 28 آذر 1396Entity Framework روز به روز در حال پیشرفته شدن است و جالب است که بدانید در حال توسعه entity framework Core است و بیشتر هدف این framework این است که ORM در آن حفظ شود و فضای زیادی را اشغال نکند.
اکنون می خواهیم یک چالش را بیان کنیم:
ما می خواهیم در این چالش از Entity Framework در پروژه های Xamarin استفاده کنیم
در چند سال گذشته این امکان وجود نداشت که شما در پروژه های اندرویدی خود از این framework استفاده کنید
ابزارها
حالا می خواهیم در مورد ابزارها برای ایجاد این امکان که بتوانیم در پروژه هایمان از entity استفاده کنیم صحبت کنیم:
-SQLite Provider: برای افزودن اطلاعات از sqllite استفاده می شود ولی حالا ما باید بسته ی SQLite Entity Framework را به پروژه ی خود اضافه کنیم.
شما می توانید از این لینک استفاده کنید.
-Entity Framework Core: ما به یک ORM برای مدیریت عملیات CRUD نیاز داریم و همین طور برای مهاجرت پایگاه داده ی خود نیاز به بسته ی زیر را داریم.
می توانید از لینک زیر استفاده کنید
حالا کار ما شروع می شود:
ابتدا کتابخانه ی NetStandard را ایجاد کنید برای انجام ساخت یک پروژه شما باید یک پروژه ی PLC ایجاد کنید
از آنجایی که این کتابخانه استاندارد نیست با استفاده از تنظیمات ،باید به یک پروژه تبدیل کرد.
حالا باید دو بسته ی زیر را در پروژه ی خود نصب نمایید
برای اینکه مطمئن شویم از استانداردهای دات نت استفاده شده است مانند تصویر زیر باید آن را چک نماییم
ایجاد پروژه Xamarin.Android
در اینجا ما باید یک پروژه ی جدید ایجاد نماییم
File -> New Single-View App (Android) Project
اضافه کردن بسته ها
Nuget
ساده ترین قسمت در پروژه ها اضافه کردن بسته ها است که شما می توانید بسته های مورد نیاز را اضافه نمایید
اضافه کردن بسته NuGet به کتابخانه استاندارد به صورت زیر است:
اضافه کردن بسته NuGet به پروژه Xamarin.Android
تعریف DbContext
اگر از قبل از Entity Framework استفاده کرده اید ، حالا می توانید از DbContext استفاده کنید
بیایید ابتدا یک کلاس ساده ایجاد کنید به صورت زیر:
public class Cat { [Key] public int CatId { get; set; } public string Name { get; set; } public int MeowsPerSecond { get; set; } }
شما از catcontex استفاده می کنید که این کلاس از DBcontex ارث بری می کند ما در کد زیر آدرس دیتابیس خود را تعریف می کنیم
public class CatContext : DbContext { public DbSet<Cat> Cats { get; set; } private string DatabasePath { get; set; } public CatContext() { } public CatContext(string databasePath) { DatabasePath = databasePath; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite($"Filename={DatabasePath}"); } }
پیاده سازی Context
ابتدا ما باید مطمئن شویم که پروژه ی Xamarin.Android به کتابخانه ی استاندارد نرم افزار پیوند دارد
حالا باید MainActivity.cs را با استفاده از Entity Framework بسازیم
[Activity(Label = "EntityFrameworkWithXamarin.Droid", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { int count = 1; protected async override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; TextView textView = FindViewById<TextView>(Resource.Id.TextView1); var dbFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); var fileName = "Cats.db"; var dbFullPath = Path.Combine(dbFolder, fileName); try { using (var db = new CatContext(dbFullPath)) { await db.Database.MigrateAsync(); //We need to ensure the latest Migration was added. This is different than EnsureDatabaseCreated. Cat catGary = new Cat() { CatId = 1, Name = "Gary", MeowsPerSecond = 5 }; Cat catJack = new Cat() { CatId = 2, Name = "Jack", MeowsPerSecond = 11 }; Cat catLuna = new Cat() { CatId = 3, Name = "Luna", MeowsPerSecond = 3 }; List<Cat> catsInTheHat = new List<Cat>() { catGary, catJack, catLuna }; if(await db.Cats.CountAsync() < 3) { await db.Cats.AddRangeAsync(catsInTheHat); await db.SaveChangesAsync(); } var catsInTheBag = await db.Cats.ToListAsync(); foreach(var cat in catsInTheBag) { textView.Text += $"{cat.CatId} - {cat.Name} - {cat.MeowsPerSecond}" + System.Environment.NewLine; } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } } }
باید سعی کنید این کد را اجرا کنید
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: Cats'.
برای هر تغییر در دیتابیس می توانید شما از migration استفاده کنید
شما می توانید برای ایجاد پروژه ی خود از کتابخانه ی netstandard
به
netcore
مهاجرت کنید
ما باید
Entity Framework Tools
و
Entity Framework Core Design
و
Entity Framework Core
را به پروژه ی خود مان اضافه کنیم
لینک 1
لینک 3
باید شما کلاس Cat.cs
و
CatContext.cs
به کلاس
DbContext
انتقال دهید و بعد یک
Migration
بزنید
حال باید یک
Contex
ایجاد کنیم با استفاده از ابزارهای دات نت شما یک کنسول جدید ایجاد نمایید
باید شما یک
Migration
داشته باشید
پوشه ی
Migration
ایجاد شد شما می توانید به سادگی
namespace
های آن را هم تغییر دهید
باید پروژه ی
Xamarin.Android را ایجاد کنید
اگر شما بخواهید یک نگاه دقیق تر داشته باشید می توانید از شبیه ساز های AMD استفاده کنید
یه پوشه ی data/data/files بروید
شما می توانید پنجره sqlite را باز کنید
و به صورت زیر خواهد بود
دوره های آموزشی زامارین
دوره برنامه نویسی اندروید با سی شارپ ( Xamarin )
آموزش متریال دیزاین در زامارین
آموزش Xamarin Forms
دوره Xamarin Form پیشرفته
- Xamarin
- 2k بازدید
- 5 تشکر