استفاده از پروایدر SQLite در Entity Framework 7
نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۳/۰۸/۲۶ ۱۹:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using Microsoft.Data.Entity;
using Microsoft.Data.Entity.Metadata;
using System.Collections.Generic;
using System.Linq;
namespace UsingEF7WithSQLite
{
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
} PM> Install-Package EntityFramework.SQLite –Pre
namespace UsingEF7SQLiteProvider
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptions builder)
{
builder.UseSQLite(@"Data Source=.\BloggingDatabae.db");
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Blog>()
.OneToMany(b => b.Posts, p => p.Blog)
.ForeignKey(p => p.BlogId);
// The EF7 SQLite provider currently doesn't support generated values
// so setting the keys to be generated from developer code
builder.Entity<Blog>()
.Property(b => b.BlogId)
.GenerateValueOnAdd(false);
builder.Entity<Post>()
.Property(b => b.BlogId)
.GenerateValueOnAdd(false);
}
}
} Install-Package EntityFramework.Commands -Pre
Add-Migration MyFirstMigration Apply-Migration
using (var db = new BloggingContext())
{
db.Database.AsMigrationsEnabled().ApplyMigrations();
} using (var db = new Models.BloggingContext())
{
db.Blogs.Add(new Models.Blog { Url = "https://www.dntips.ir" });
db.SaveChanges();
foreach (var item in db.Blogs)
{
Console.WriteLine(item.Url);
}
}
Console.ReadLine(); Install-Package : 'EntityFramework.SQLite' already has a dependency defined for 'EntityFramework.Migrations'.
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.*" />
</ItemGroup>
</Project> یک نکتهی تکمیلی: اگر از SQLite به همراه بستهی Microsoft.EntityFrameworkCore.Sqlite استفاده میکنید ... موتور SQLite آن، کمی قدیمی است. برای بهروز رسانی موتور خود SQLite، نیاز است بستهی SQLitePCLRaw.bundle_e_sqlite3 را هم به لیست ارجاعات برنامهی خود اضافه کنید (به صورت صریح). برای مثال نگارش 8.0.7 به همراه EF-Core هر چند ارجاعی را به SQLitePCLRaw.bundle_e_sqlite3 دارد، اما از نگارش 2.1.6 آن استفاده میکند که مربوط به سال قبل است.
bundle_sqlite3، bundle_winsqlite3، bundle_green و bundle_e_sqlite3mc به طور کامل حذف شدهاند..csproj:<PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="3.x.x" />
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
bundle_e_sqlite3: اگر در حال حاضر از پکیج محبوب SQLitePCLRaw.bundle_e_sqlite3 استفاده میکنید، نیازی به هیچ تغییر کدی ندارید؛ فقط کافیست ورژن آن را به نسخه 3.x بروزرسانی کنید.<PackageReference Include="SQLitePCLRaw.config.e_sqlite3" Version="3.0.1" /> <PackageReference Include="SourceGear.sqlite3" Version="3.50.3" />
SourceGear.sqlite3 را آپدیت میکنید.SQLitePCLRaw.core و پرووایدر آن رفرنس بدهید و آن را مَپ کنید.