首頁  >  文章  >  後端開發  >  .NET Core中如何使用Entity Framework操作PostgreSQL?

.NET Core中如何使用Entity Framework操作PostgreSQL?

青灯夜游
青灯夜游轉載
2018-10-20 17:49:566276瀏覽

這篇文章帶給大家的內容是介紹.NET Core中使用Entity Framework操作PostgreSQL的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

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);
        });
    }
}

以下是顯示的結果:
.NET Core中如何使用Entity Framework操作PostgreSQL?

程式正常運作的話,資料庫中應該可以看到所產生的資料表:
.NET Core中如何使用Entity Framework操作PostgreSQL?

.NET Core中如何使用Entity Framework操作PostgreSQL?

.NET Core中如何使用Entity Framework操作PostgreSQL?

再檢視資料表的產生腳本,可以看到欄位以及資料表之間的關聯式皆透過Entity Framework自動產生。
.NET Core中如何使用Entity Framework操作PostgreSQL?

.NET Core中如何使用Entity Framework操作PostgreSQL?

以上是.NET Core中如何使用Entity Framework操作PostgreSQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除