编写一个程序,.net frameword 4.7.2框架,使用EF6创建名称为mydb.sqlite的数据库,里面有Test1和Test2、Test3三个实体类,Test2是Test1的导航属性,Test3也是Test1的导航属性,并且可以进行增删改查等操作,并创建数据库帮助类
时间: 2023-10-07 13:07:40 浏览: 84
很好,下面是一个基于EF6的SQLite数据库帮助类和三个实体类的示例代码:
首先,我们需要添加SQLite支持。在Visual Studio中,打开“工具” -> “NuGet 包管理器” -> “程序包管理器控制台”,输入以下命令:
```
Install-Package System.Data.SQLite.EF6
```
接下来,我们可以创建一个SQLite数据库帮助类,并在其中定义Test1、Test2、Test3三个实体类:
```csharp
using System.Data.Entity;
public class MyDbContext : DbContext
{
public MyDbContext() : base("name=MyDbConnectionString")
{
}
public DbSet<Test1> Test1s { get; set; }
public DbSet<Test2> Test2s { get; set; }
public DbSet<Test3> Test3s { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 配置Test1实体类的导航属性Test2和Test3
modelBuilder.Entity<Test1>()
.HasMany(t => t.Test2s)
.WithRequired(t => t.Test1)
.HasForeignKey(t => t.Test1Id);
modelBuilder.Entity<Test1>()
.HasMany(t => t.Test3s)
.WithRequired(t => t.Test1)
.HasForeignKey(t => t.Test1Id);
}
}
public class Test1
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Test2> Test2s { get; set; }
public virtual ICollection<Test3> Test3s { get; set; }
}
public class Test2
{
public int Id { get; set; }
public string Name { get; set; }
public int Test1Id { get; set; }
public virtual Test1 Test1 { get; set; }
}
public class Test3
{
public int Id { get; set; }
public string Name { get; set; }
public int Test1Id { get; set; }
public virtual Test1 Test1 { get; set; }
}
```
在上面的代码中,我们定义了一个派生自DbContext的MyDbContext类,并在其中定义了Test1、Test2、Test3三个实体类。Test2和Test3都是Test1的导航属性,可以通过Test1访问它们。
接下来,我们需要修改App.config文件,添加连接字符串:
```xml
<connectionStrings>
<add name="MyDbConnectionString" connectionString="Data Source=mydb.sqlite" providerName="System.Data.SQLite" />
</connectionStrings>
```
这里我们使用了SQLite作为数据库引擎,连接字符串中指定了数据库文件路径。
最后,我们可以在程序中使用MyDbContext来进行数据库操作:
```csharp
using (var db = new MyDbContext())
{
// 新增一个Test1对象,并将其保存到数据库
var test1 = new Test1 { Name = "Test1" };
db.Test1s.Add(test1);
db.SaveChanges();
// 新增一个Test2对象,并将其与Test1关联后保存到数据库
var test2 = new Test2 { Name = "Test2", Test1Id = test1.Id };
db.Test2s.Add(test2);
db.SaveChanges();
// 查询Test1及其导航属性Test2和Test3的信息
var query = db.Test1s.Include(t => t.Test2s).Include(t => t.Test3s);
foreach (var t in query)
{
Console.WriteLine("Test1: {0}", t.Name);
foreach (var t2 in t.Test2s)
{
Console.WriteLine("\tTest2: {0}", t2.Name);
}
foreach (var t3 in t.Test3s)
{
Console.WriteLine("\tTest3: {0}", t3.Name);
}
}
// 修改Test1的名称,并将其保存到数据库
test1.Name = "Modified Test1";
db.SaveChanges();
// 删除Test2对象,并将其从数据库中删除
db.Test2s.Remove(test2);
db.SaveChanges();
}
```
在上面的代码中,我们先创建了一个MyDbContext对象,然后通过该对象对数据库进行了操作。首先,我们新增了一个Test1对象并将其保存到数据库;接着,我们新增了一个Test2对象并将其与Test1关联后保存到数据库;然后,我们查询了Test1及其导航属性Test2和Test3的信息,并输出到控制台;最后,我们修改了Test1的名称并将其保存到数据库,然后删除了Test2对象并将其从数据库中删除。
至此,我们已经完成了一个基于EF6的SQLite数据库帮助类和三个实体类的示例代码。
阅读全文