EFCore操作SQL数据库

3 篇文章 0 订阅
2 篇文章 1 订阅

一、单表操作

  1. 数据表的创建,创建名为UserData的数据表,包含以下属性(UserId、UserName、Password)

在对表操作前向主程序program.cs中插入方法的调用

using (var db = new Learn.Db.Db.FirstDbContext())
  1. 数据的查询

var blogs = db.UserData
    .Where(b =>b.UserId == 1)
    .ToList();
Console.WriteLine(blogs.ToString());
blogs.ToString();

SQL查询

var  data = db.UserData.FromSqlInterpolated($"SELECT * FROM LearnDb.dbo.UserData WHERE UserId = {1}").ToList();
var blogs = db.UserData.FromSqlInterpolated($"SELECT * FROM dbo.Blogs");
  1. 添加数据

UserData UserData = new UserData();
UserData.UserId = 3;
UserData.UserName = "ChenZhe";
UserData.Password = "111111";
db.UserData.Add(UserData);
int count = db.SaveChanges();
  1. 修改数据

var UserData = db.UserData.Single(UserData => UserData.UserName=="Make");//查询原数据
UserData.UserName ="WuTao";//修改原数据
await db.SaveChangesAsync();//把修改的数据保存关系数据库
  1. 删除数据

var UserData = db.UserData.Single(UserData => UserData.UserName == "ZhangLe");
db.Remove(UserData);
await db.SaveChangesAsync();//把删除的数据保存关系数据库

二、多表查询

1.数据准备

建立以下两张表,用来做联表查询(通过Id将两张表连接起来,查询Pet所对应的Owner):

2. 获取属性

public class Entity
{
    //Persons表
    [Table("Persons")]
    public class Persons 
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }
    //Pets表
    [Table("Pets")]
    public class Pets
    {
        [Key]
        public int Id { get; set; }
        [Column("Name", TypeName = "string")]
        public string  PetName { get; set; }
        public int Owner { get; set; }
    }
}

3. 建立模型

public DbSet<Entity.Persons> Persons { get; set; }

public DbSet<Entity.Pets> Pets { get; set; }

public DbSet<Result> Results { get; set; }

Result用来保存查询到的结果。

4. 定义接口

创建一个接口类用来定义接口

public interface IActionResult
{
     List<Result>  TestQuery();   
}

5. 定义方法

创建一个类用来定义方法

public class ActionResult : IActionResult
{
    public List<Result> TestQuery()
    {
        try
        {
            using (var db = new Learn.Db.Db.FirstDbContext())
            {
                var sql = "select a.Id,a.Name,b.Name PetName from Persons a left join Pets b on a.Id = b.Id";
                var result =  db.Results.FromSqlRaw(sql).ToList();
                return result;
            }
        }
        catch (Exception)
        {
            throw;
        }
}

6. 调用方法,运行程序

IActionResult actionResult = new ActionResult();//调用方法
using (var db = new Learn.Db.Db.FirstDbContext())
{
    var data = actionResult.TestQuery();
}
catch(Exception e)
{
}

程序运行结果如下:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Entity Framework Core(EF Core)进行数据库操作时,你不需要显式打开或关闭数据库连接。EF Core 会自动管理数据库连接的打开和关闭。 要使用 SQL 更新数据,你可以使用 EF Core 提供的 `ExecuteSqlRaw` 或 `ExecuteSqlInterpolated` 方法。这些方法允许你执行原始的 SQL 查询或命令。 下面是一个示例代码,展示了如何使用 EF Core 执行原始 SQL 更新数据: ```csharp using Microsoft.EntityFrameworkCore; using System; // 创建 DbContext 类 public class YourDbContext : DbContext { public YourDbContext(DbContextOptions<YourDbContext> options) : base(options) { } // DbSet 和其他属性... public DbSet<IPS_Invoice> IPS_Invoices { get; set; } } public class IPS_Invoice { public int IPS_ID { get; set; } public bool BLOCK { get; set; } public DateTime? BLOCKTIME { get; set; } } public class YourRepository { private readonly YourDbContext _dbContext; public YourRepository(YourDbContext dbContext) { _dbContext = dbContext; } public string UpdateBlockTime(IPS_Invoice model) { string message = ""; try { int affectedRows = _dbContext.Database.ExecuteSqlInterpolated($"UPDATE IPS_Invoices SET BLOCK = true, BLOCKTIME = {DateTime.Now} WHERE IPS_ID = {model.IPS_ID}"); if (affectedRows > 0) { message = "True"; } else { message = "No records updated"; } } catch (Exception e) { message = "False"; // 处理异常... } return message; } } ``` 在上述代码中,我们首先创建了一个继承自 `DbContext` 的 `YourDbContext` 类,并定义了需要操作的实体类 `IPS_Invoice`。然后,我们创建了一个名为 `YourRepository` 的仓储类,在该类中使用 `ExecuteSqlInterpolated` 方法执行原始的 SQL 更新操作。 在 `UpdateBlockTime` 方法中,我们使用插值字符串(interpolated string)来构建 SQL 命令,并将其传递给 `ExecuteSqlInterpolated` 方法进行执行。如果更新操作成功影响了一行或多行数据,返回的 `affectedRows` 将大于 0。 请根据你的实际情况修改代码,并确保在使用 EF Core 时按照最佳实践进行数据库操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值