NopCommerce是一个基于ASP.NET Core的开源电子商务平台,其中使用了EntityFramework数据库进行数据操作。在这篇文章中,我们将详细讲解如何初始化NopCommerce的数据库,并且进行基本的数据操作。
EntityFramework数据库初始化
EntityFramework是一种ORM(Object-Relational Mapping)框架,它可以将关系型数据库中的数据映射到.NET对象上。NopCommerce中使用的是EF Core,首先需要配置DbContext,并且在Startup.cs文件中增加如下代码:
public void ConfigureServices(IServiceCollection services)
{
...
// DbContext configuration
services.AddDbContext<NopDbContext>(options =>
options.UseSqlServer(_configuration.GetConnectionString("DefaultConnection")));
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
...
// DbContext initialization
using (var serviceScope = app.ApplicationServices.CreateScope())
{
var dbContext = serviceScope.ServiceProvider.GetRequiredService<NopDbContext>();
dbContext.Database.Migrate();
NopSeedData.SeedAsync(dbContext).Wait();
}
...
}
上述代码中,我们使用AddDbContext
方法配置了NopDbContext,并且在Configure方法中初始化了DbContext。在DbContext初始化期间,我们可以选择是否需要自动迁移数据库,此处我们选择使用DbContext的Migrate
方法进行自动迁移。
EntityFramework数据操作
1. 增加数据
我们可以通过DbContext的Add
方法实现单条数据的增加操作,例如:
var product = new Product
{
Name = "Test Product",
Price = 20.0m,
ShortDescription = "This is a test product."
};
dbContext.Products.Add(product);
dbContext.SaveChanges();
上述代码中,我们创建了一个新的Product对象,并且使用Add方法将其添加到DbContext中,最后调用SaveChanges方法保存数据。
如果需要批量添加多个对象,我们可以使用AddRange
方法。例如:
var products = new List<Product>
{
new Product
{
Name = "Product 1",
Price = 10.0m,
ShortDescription = "Product 1."
},
new Product
{
Name = "Product 2",
Price = 20.0m,
ShortDescription = "Product 2."
}
};
dbContext.Products.AddRange(products);
dbContext.SaveChanges();
上述代码中,我们创建了一个包含两个Product对象的列表,并且使用AddRange方法将它们一次性添加到DbContext中,最后调用SaveChanges方法保存数据。
2. 查询数据
我们可以通过DbContext的Set
方法获取对应的DbSet,从而实现数据的查询操作。例如:
var products = dbContext.Set<Product>().Where(p => p.Name.Contains("Product")).ToList();
上述代码中,我们获取了Product的DbSet,并使用Where方法筛选出名称中包含"Product"的Product对象,最后使用ToList方法将结果转换为List集合。
如果需要查询单个数据对象,我们可以使用FirstOrDefault
方法。例如:
var product = dbContext.Set<Product>().FirstOrDefault(p => p.Id == 1);
上述代码中,我们获取了Product的DbSet,并使用FirstOrDefault方法获取Id为1的Product对象。
示例
下面是一个完整的示例代码,其中包含了Product的增加和查询操作。
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Nop.Core.Domain.Catalog;
using Nop.Data;
namespace NopCommerceDemo
{
class Program
{
static void Main(string[] args)
{
// DbContext initialization
var optionsBuilder = new DbContextOptionsBuilder<NopDbContext>();
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=NopCommerceDemo;Trusted_Connection=True;");
using (var dbContext = new NopDbContext(optionsBuilder.Options))
{
// Add a product
var product = new Product
{
Name = "Test Product",
Price = 20.0m,
ShortDescription = "This is a test product."
};
dbContext.Products.Add(product);
dbContext.SaveChanges();
// Get products which name contains "Product"
var products = dbContext.Set<Product>().Where(p => p.Name.Contains("Product")).ToList();
foreach (var p in products)
{
Console.WriteLine($"Product: {p.Name}, Price: {p.Price:C}, Description: {p.ShortDescription}");
}
}
}
}
}
需要注意的是,在执行此示例代码前,需要确保已经创建了数据库。可以在Visual Studio的Package Manager Console中执行Update-Database
命令进行数据库的自动迁移。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NopCommerce架构分析之(三)EntityFramework数据库初试化及数据操作 - Python技术站