.net framework 4.7.2框架使用 EF DbContext的类创建Sqlite数据库和数据表
时间: 2024-01-07 16:05:31 浏览: 264
首先,你需要在项目中添加对Entity Framework 6的引用,然后在NuGet包管理器中安装System.Data.SQLite.EF6包。
接下来,你需要创建一个继承自DbContext的类,如下所示:
```csharp
using System.Data.Entity;
public class MyDbContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
public MyDbContext() : base("name=MyConnectionString")
{
Database.SetInitializer(new MyDatabaseInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>()
.HasKey(e => e.Id)
.ToTable("MyTable");
base.OnModelCreating(modelBuilder);
}
}
```
上述代码中,MyDbContext是你自己定义的DbContext类,它包含一个DbSet属性和一个构造函数。在构造函数中,我们使用base关键字调用DbContext的构造函数,并将连接字符串传递给它。我们还设置了一个数据库初始化程序(MyDatabaseInitializer),它将在第一次使用数据库时创建数据库和表。
在OnModelCreating方法中,我们定义了实体的主键和表名。
接下来,你需要创建一个MyDatabaseInitializer类,如下所示:
```csharp
using System.Data.Entity;
public class MyDatabaseInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
protected override void Seed(MyDbContext context)
{
base.Seed(context);
context.Database.ExecuteSqlCommand("CREATE INDEX MyIndex ON MyTable(MyColumn)");
}
}
```
上述代码中,MyDatabaseInitializer是一个派生自CreateDatabaseIfNotExists类的自定义类,它将在第一次使用数据库时创建数据库和表。在Seed方法中,我们可以添加一些初始数据或执行一些自定义的SQL语句。
最后,你需要在应用程序中实例化MyDbContext类,并使用它来访问数据库,如下所示:
```csharp
using (var context = new MyDbContext())
{
var myEntity = new MyEntity
{
Id = 1,
Name = "My Entity"
};
context.MyEntities.Add(myEntity);
context.SaveChanges();
}
```
上述代码中,我们创建了一个MyEntity对象,并将其添加到MyEntities集合中。然后,我们调用SaveChanges方法将更改保存到数据库中。
注意:在使用SQLite数据库时,你需要在连接字符串中指定SQLite提供程序,如下所示:
```csharp
<add name="MyConnectionString" connectionString="Data Source=MyDatabase.sqlite" providerName="System.Data.SQLite.EF6" />
```
阅读全文