多层项目中EF Cores使用流程及例子

当在多层项目中使用 Entity Framework Core (EF Core),可以按照以下流程进行设置和操作,同时提供一个简单的例子来说明每个步骤:

  1. 定义数据模型:
    • 在数据访问层中,定义实体类来表示数据库中的表或集合。每个实体类代表数据库中的一个实体(表)。
    • 使用数据注解或 Fluent API 来配置实体类的属性、关系和约束。
 
 

csharpCopy code

// 数据访问层中的实体类

public class Product

{

   public int Id { get; set; }

   public string Name { get; set; }

   public decimal Price { get; set; }

}

  1. 创建数据库上下文类:
    • 在数据访问层中,创建一个继承自 DbContext 的类,作为与数据库交互的主要入口点。
    • 在上下文类中,定义 DbSet<T> 属性来表示每个实体类对应的数据库表或集合。
    • 配置数据库连接字符串和其他数据库选项。

csharpCopy code

// 数据访问层中的数据库上下文类

public class AppDbContext : DbContext

{

   public DbSet<Product> Products { get; set; }

   protected override void OnConfiguring(DbContextOptionsBuilder  optionsBuilder)

   { // 配置数据库连接

     optionsBuilder.UseSqlServer("YourConnectionString");

   }

}

  1. 实现数据访问层:
    • 在数据访问层中,创建数据访问接口和实现类,以封装对数据的访问和操作。
    • 数据访问接口应定义常见的 CRUD 操作以及其他需要的查询方法。
    • 数据访问实现类使用 EF Core 上下文类来执行数据库操作。
 
 

csharpCopy code

// 数据访问层中的数据访问接口

public interface IProductRepository {

IEnumerable<Product> GetAll();

Product GetById(int id);

void Add(Product product);

void Update(Product product);

void Delete(int id);

}

// 数据访问层中的数据访问实现类

public class ProductRepository : IProductRepository {

private readonly AppDbContext _dbContext;

public ProductRepository(AppDbContext dbContext) { _dbContext = dbContext; }

public IEnumerable<Product> GetAll() { return _dbContext.Products.ToList(); }

public Product GetById(int id) { return _dbContext.Products.Find(id); }

public void Add(Product product) {

_dbContext.Products.Add(product);

_dbContext.SaveChanges();

}

public void Update(Product product) {

_dbContext.Products.Update(product);

_dbContext.SaveChanges();

}

public void Delete(int id) {

var product = _dbContext.Products.Find(id);

if (product != null)

{

_dbContext.Products.Remove(product); _dbContext.SaveChanges();

}

}

}

  1. 注入依赖关系:
    • 在业务逻辑层中,使用依赖注入容器将数据访问接口和实现类注册为服务。
    • 通过构造函数注入将数据访问接口的实例注入到业务逻辑类中,以便业务逻辑层可以使用数据访问层的功能。
 
 

csharpCopy code

// 业务逻辑层中的服务类

public class ProductService {

    private readonly IProductRepository _productRepository;

    public ProductService(IProductRepository productRepository) {

    _productRepository = productRepository;

     }

     public IEnumerable<Product> GetAllProducts() {

         return _productRepository.GetAll();

     }

     public Product GetProductById(int id) {

        return _productRepository.GetById(id);

      }

      public void AddProduct(Product product) {

          _productRepository.Add(product);

      }

     public void UpdateProduct(Product product) {

         _productRepository.Update(product);

      }

     public void DeleteProduct(int id) {

         _productRepository.Delete(id);

     }

}

  1. 表现层的使用:
    • 在表现层(例如控制器、视图、API 端点等)中,使用业务逻辑层来处理请求和响应,并根据需要调用数据访问层的方法来访问数据库。

这个示例中演示了如何在多层项目中使用 EF Core。请注意,实际项目可能会更复杂,具体的实现和结构会根据项目需求和规模而有所变化。

猜你喜欢

转载自blog.csdn.net/weixin_57062986/article/details/131823879