Entity Framework 7 In-Memory Database 实践

在软件开发中,数据库是不可或缺的一部分。随着技术的发展,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功能。

安装NuGet包

首先,需要安装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来管理这些模型。这个过程相对简单,只需要继承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(); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485