用 EF core 写一个仓储系统的数据库设计代码
时间: 2024-06-12 08:03:48 浏览: 157
仓库管理系统的数据库设计
5星 · 资源好评率100%
这里提供一个简单的仓储系统的数据库设计代码,使用 EF Core:
```csharp
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public ICollection<ProductInWarehouse> Warehouses { get; set; }
}
public class Warehouse
{
public int Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public ICollection<ProductInWarehouse> Products { get; set; }
}
public class ProductInWarehouse
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int WarehouseId { get; set; }
public Warehouse Warehouse { get; set; }
public int Quantity { get; set; }
}
public class RepositoryContext : DbContext
{
public RepositoryContext(DbContextOptions<RepositoryContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
public DbSet<Warehouse> Warehouses { get; set; }
public DbSet<ProductInWarehouse> ProductsInWarehouses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProductInWarehouse>()
.HasKey(p => new { p.ProductId, p.WarehouseId });
modelBuilder.Entity<ProductInWarehouse>()
.HasOne(p => p.Product)
.WithMany(p => p.Warehouses)
.HasForeignKey(p => p.ProductId);
modelBuilder.Entity<ProductInWarehouse>()
.HasOne(p => p.Warehouse)
.WithMany(p => p.Products)
.HasForeignKey(p => p.WarehouseId);
}
}
```
这个代码定义了三个实体类:Product(产品)、Warehouse(仓库)和ProductInWarehouse(产品在仓库的数量)。它们之间的关系是多对多的,通过ProductInWarehouse来关联。在数据库中,会生成三张表:Products、Warehouses和ProductsInWarehouses。其中,ProductsInWarehouses表是Product和Warehouse的关联表,同时还记录了产品在仓库中的数量。
在RepositoryContext中,定义了这三张表的DbSet属性,以及它们之间的关系。在OnModelCreating方法中,定义了ProductInWarehouse实体类的复合主键,以及它和Product、Warehouse的外键关系。这些设置可以让EF Core自动生成正确的数据库结构。
在使用EF Core时,可以通过RepositoryContext的实例来对这些实体进行增删改查等操作,例如:
```csharp
using (var context = new RepositoryContext(options))
{
var warehouse = new Warehouse { Name = "Warehouse 1", Location = "Location 1" };
context.Warehouses.Add(warehouse);
var product = new Product { Name = "Product 1", Price = 10.5m, Quantity = 100 };
context.Products.Add(product);
var productInWarehouse = new ProductInWarehouse { Product = product, Warehouse = warehouse, Quantity = 50 };
context.ProductsInWarehouses.Add(productInWarehouse);
context.SaveChanges();
}
```
这个例子创建了一个Warehouse实体、一个Product实体和一个ProductInWarehouse实体,并将它们添加到DbContext中。然后调用SaveChanges方法,EF Core会自动将这些实体保存到数据库中。
阅读全文