.NET Core开发日志——Entity Framework与PostgreSQL
Entity Framework在.NET Core中被命名为Entity Framework Core。虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以PostgreSQL作为例子。 PostgreSQLPostgreSQL可以选用原生系统与Docker两种安装方式。
Package在应用程序工程中添加相关的引用。 Entity编写两个实体类,用于映射User表与Order表。 public class User { [Key] public int Id { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Order> Orders { get; set; } public override string ToString() { var orders = new StringBuilder(); foreach (var o in Orders) { orders.Append(o.ToString()); } return $"UserId: {Id} Name: {Name} Orders: {orders.ToString()}"; } } public class Order { [Key] public int Id { get; set; } [Required] public int UserId { get; set; } [Required] public string Item { get; set; } [Required] public string Description { get; set; } public virtual User User { get; set; } public override string ToString() { return $"OrderId: {Id} Item: {Item} Descriptoin: {Description}"; } } DbContext构建必要的DbContext类,并传入连接PostgreSQL所需的参数。 public class PurchaseDbContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<Order> Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder builder) { builder.UseNpgsql("Host=localhost;Username=postgres;Password=random;Database=Purchase"); } } Seeder构建一个用于初始化数据库的辅助类。 public class PurchaseDbContxtSeeder { public static void Seed(PurchaseDbContext context) { context.Database.EnsureDeleted(); context.Database.EnsureCreated(); var users = new List<User> { new User { Name = "Tom" },new User { Name = "Mary" } }; var orders = new List<Order> { new Order { User = users[0],Item = "cloth",Description = "handsome"},new Order {User = users[1],Item = "hat",Description = "red"},Item = "boot",Description = "black"} }; context.Users.AddRange(users); context.Orders.AddRange(orders); context.SaveChanges(); } } Test测试的程序第一步是调用生成数据的辅助类,第二步是查询数据表中的数据并在控制台中显示出来。 static void Main(string[] args) { using (var context = new PurchaseDbContext()) { PurchaseDbContxtSeeder.Seed(context); var users = context.Users.Include(u => u.Orders).ToList(); users.ForEach(u => { System.Console.WriteLine(u); }); } } 以下是显示的结果: 程序正常运行的话,数据库中应该可以看到所生成的数据表: 再查看数据表的生成脚本,可以看到字段以及表之间的关系皆通过Entity Framework自动生成。 小结在之前写过的两篇文章里列举了通过ADO.NET操作SQL Server数据库与Dapper操作MySQL数据库的方法。 ADO.NET data provider 这三种方式都可运用于生产环境,且已被无数正式项目验证过,至于选用何种方式,主要取决于开发者的习惯与喜好。.NET Core生态圈还是相当自由的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |