在软件开发中,数据库是不可或缺的一部分。随着技术的发展,Entity Framework(EF)作为.NET平台的ORM(对象关系映射)工具,已经发展到了第七代。EF 7引入了In-Memory Database支持,这意味着开发者可以在不连接真实数据库的情况下进行开发和测试。本文将介绍如何使用EF 7的In-Memory Database功能来开发一个小型项目,以帮助一位行政人员提高日常工作的效率。
项目的目标是为一位行政人员创建一个辅助工具,以简化其日常工作流程。这个工具将涉及到数据库操作,因此需要选择一个合适的技术栈。考虑到项目规模较小,决定使用Owin和ASP.NET MVC 5作为后端框架,并使用Aurelia.IO进行前端开发。对于数据库,决定尝试EF 7的In-Memory Database功能。
首先,需要安装EntityFramework.InMemory NuGet包。这可以通过Visual Studio 2015的NuGet包管理器轻松完成。需要注意的是,由于使用的是预发布版本,因此需要在NuGet配置中启用预发布包的安装。
接下来,需要定义一些模型类。在这个例子中,定义了两个类:Person和Qualification。
public class Person
{
public Person()
{
Qualifications = new List<Qualification>();
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Qualification> Qualifications { get; set; }
public override string ToString()
{
string qualifications = Qualifications.Any() ?
Qualifications.Select(x => x.Description)
.Aggregate((x, y) => string.Format("{0} {1}", x, y)) :
string.Empty;
return string.Format("Id : {0}, FirstName : {1}, LastName : {2}, \r\nQualifications : {3}\r\n",
Id, FirstName, LastName, qualifications);
}
}
public class Qualification
{
public int Id { get; set; }
public string Description { get; set; }
public override string ToString()
{
return string.Format("Id : {0}, Description : {1}", Id, Description);
}
}
定义好模型类后,需要创建一个DbContext来管理这些模型。这个过程相对简单,只需要继承DbContext类并定义DbSet属性。
public class ClassDbContext : DbContext
{
public ClassDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<Person> Members { get; set; }
public DbSet<Qualification> Qualifications { get; set; }
}
class Program
{
static void Main(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ClassDbContext>();
optionsBuilder.UseInMemoryDatabase();
using (var classDbContext = new ClassDbContext(optionsBuilder.Options))
{
SeedData(classDbContext);
var personId1 = GetMember(classDbContext, 1);
Console.WriteLine("> Adding a qualification\r\n");
personId1.Qualifications.Add(classDbContext.Qualifications.First());
classDbContext.SaveChanges();
personId1 = GetMember(classDbContext, 1);
Console.ReadLine();
}
}
private static Person GetMember(ClassDbContext classDbContext, int id)
{
var person = classDbContext.Members.FirstOrDefault(x => x.Id == id);
Console.WriteLine(person);
return person;
}
private static void SeedData(ClassDbContext classDbContext)
{
classDbContext.Members.Add(new Person()
{
Id = 1,
FirstName = "Sacha",
LastName = "Barber"
});
classDbContext.Members.Add(new Person()
{
Id = 2,
FirstName = "Sarah",
LastName = "Barber"
});
classDbContext.Qualifications.Add(new Qualification()
{
Id = 1,
Description = "Bsc Hons : Computer Science"
});
classDbContext.Qualifications.Add(new Qualification()
{
Id = 2,
Description = "Msc : Computer Science"
});
classDbContext.Qualifications.Add(new Qualification()
{
Id = 3,
Description = "Bsc Hons : Naturapathic medicine"
});
classDbContext.SaveChanges();
}
}