core EFCore 开始尝试

准备工作:

工程:core + console

引用包:

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.Extensions.Configuration.Json

Sqlserver库:127.0.0.1   MyDB  sa  xxx

表:MyTable  --> ID int primaryKey  ……

可以使用Scaffold-DbContext命令生成上下文和实体(此步依赖Microsoft.EntityFrameworkCore.Tools),如下:

Scaffold-DbContext "Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=xxx;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir models

生成的MyDbContext如下:

public partial class MyDBContext : DbContext
{
    public virtual DbSet<MyTable> MyTable { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            //改为读取json配置文件中连接字符串
            optionsBuilder.UseSqlServer(Common.configuration.GetSection("connStr").Value);
            //optionsBuilder.UseSqlServer(@"Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=@sa123;MultipleActiveResultSets=true");
        }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyTable>(entity =>
        {
            entity.Property(e => e.Id).HasColumnName("ID");

            entity.Property(e => e.Address)
                .HasMaxLength(50)
                .IsUnicode(false);

            entity.Property(e => e.Name)
                .HasMaxLength(50)
                .IsUnicode(false);

            entity.Property(e => e.Value)
                .HasMaxLength(50)
                .IsUnicode(false);
        });
    }
}

改为由json配置文件读取连接字符串需引用Microsoft.Extensions.Configuration.Json,当然前提可解析json的包也可以,在console中,json文件属性需设置为“始终复制,内容”,使用如下:

public class Common
{
    public static IConfiguration configuration { get; set; }
}
//附加配置文件
Common.configuration = new ConfigurationBuilder().Add(new JsonConfigurationSource() { Path = "project.json" }).Build();
//获取配置文件信息
Common.configuration.GetSection("connStr").Value;
//获取配置文件信息时转为对象
Common.configuration.GetSection("connStr").Get<string>();

 

测试程序如下:

class Program
{
    static void Main(string[] args)
    {
        Common.configuration = new ConfigurationBuilder().Add(new JsonConfigurationSource() { Path = "project.json" }).Build();
        using (MyDBContext context = new MyDBContext())
        {
            var model = context.MyTable.Find(1);
            var list = context.MyTable.FromSql(new RawSqlString("select * from mytable")).ToListAsync().Result;
        }
        Console.ReadKey();
    }
}

 

转载于:https://www.cnblogs.com/lcawen/p/9024304.html

05-01
### Entity Framework Core 使用指南 #### 什么是 Entity Framework Core? Entity Framework Core (EF Core) 是一种轻量级、可扩展且跨平台的对象关系映射(ORM)框架,用于 .NET 应用程序开发。它允许开发者通过面向对象的方式与数据库交互,而无需编写大量 SQL 查询。 --- #### 安装 EF Core 要使用 EF Core 进行数据库操作,首先需要安装相应的 NuGet 包。以下是常见的包及其用途: - **Microsoft.EntityFrameworkCore**: 提供核心功能。 - **Microsoft.EntityFrameworkCore.SqlServer**: 支持 Microsoft SQL Server 数据库- **Microsoft.EntityFrameworkCore.MySQL**: 支持 MySQL 数据库[^3]。 - **Microsoft.EntityFrameworkCore.Tools**: 提供迁移工具支持。 可以通过以下命令安装这些包: ```powershell Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools ``` --- #### 创建 DbContext 和实体模型 在 EF Core 中,`DbContext` 类是应用程序与数据库之间的桥梁。定义 `DbSet<T>` 属性来表示表中的数据集合。 下面是一个简单的例子,展示如何创建一个上下文类以及对应的实体类: ```csharp using Microsoft.EntityFrameworkCore; public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } public class ApplicationDbContext : DbContext { public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 配置连接字符串 var connectionString = "server=localhost;port=2881;user=root;password=your_password;database=your_database;"; optionsBuilder.UseMySQL(connectionString); // 替换为实际使用的提供程序 } } ``` 此代码片段展示了如何配置 `ApplicationDbContext` 并设置连接字符串[^3]。 --- #### 执行 CRUD 操作 EF Core 提供了简单的方法来进行增删改查操作。 ##### 添加记录 ```csharp var product = new Product { Name = "Laptop", Price = 999.99m }; using (var context = new ApplicationDbContext()) { context.Products.Add(product); context.SaveChanges(); } ``` ##### 更新记录 ```csharp using (var context = new ApplicationDbContext()) { var product = context.Products.FirstOrDefault(p => p.Id == 1); if (product != null) { product.Price = 1099.99m; context.SaveChanges(); } } ``` ##### 删除记录 ```csharp using (var context = new ApplicationDbContext()) { var product = context.Products.Find(1); if (product != null) { context.Products.Remove(product); context.SaveChanges(); } } ``` ##### 查询记录 ```csharp using (var context = new ApplicationDbContext()) { var products = context.Products.Where(p => p.Price > 500).ToList(); foreach (var product in products) { Console.WriteLine($"{product.Name}: ${product.Price}"); } } ``` --- #### 数据库迁移 为了同步数据库模式与代码模型,可以使用 EF Core 的迁移机制。 1. 初始化迁移环境: ```powershell Add-Migration InitialCreate ``` 2. 将更改应用到数据库: ```powershell Update-Database ``` 如果需要回滚迁移,可以运行以下命令: ```powershell Remove-Migration ``` --- #### 插件增强功能 除了基础功能外,还可以借助插件提升效率或实现特定需求。 - **EntityFrameworkCore.Triggered**:在保存变更前后触发自定义逻辑[^1]。 - **Moq.EntityFrameworkCore**:用于单元测试时模拟 EF Core 行为[^2]。 - **EntityFramework Plus**:提供更多高级特性,如批量更新和审计日志[^4]。 --- #### 常见问题解决 1. 如果遇到连接失败,请确认连接字符串是否正确并匹配所选的数据库提供程序。 2. 当迁移报错时,可能是因为现有数据库结构不一致;尝试删除旧迁移文件重新生成。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值