Entity Framework在.NET Core中被命名为Entity Framework Core。虽然一般会用于对sql Server数据库进行数据操作,但其实它还支持其它数据库,这里就以Postgresql作为例子。
Postgresql
Postgresql可以选用原生系统与Docker两种安装方式。
Official
Docker
Package
在应用程序工程中添加相关的引用。dotnet add package Npgsql.EntityFrameworkCore.Postgresql
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}, new Order {User = users[1], 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自动生成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。