You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求这段OleDb数据查询代码的Entity Framework等效实现

用Entity Framework实现等效功能的分步指南

嘿,刚上手EF的话,你会发现它比直接写OleDb代码简洁安全多了,还能帮你自动处理资源释放(比如数据库连接),也避免了SQL注入风险。咱们一步步把你的原有代码转换成EF版本:

第一步:创建EF实体类和DbContext

首先你需要把数据库里的tbPeople表映射成一个C#实体类,再创建一个继承自DbContext的上下文类来管理数据库连接和操作:

// 对应tbPeople表的实体类
public class Person
{
    // 假设表中有主键列(比如Id),EF需要主键来跟踪实体
    public int Id { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Country { get; set; }
    // 表中其他列也可以在这里添加对应的属性
}

// EF上下文类,负责数据库交互
public class PeopleDbContext : DbContext
{
    // 配置数据库连接字符串(和你原来的DBConString一致)
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 如果是SQL Server数据库用这句
        optionsBuilder.UseSqlServer(WindowsFormsApplication2.Properties.Settings.Default.DBConString);
        // 如果是Access数据库,替换成下面这句:
        // optionsBuilder.UseOleDb(WindowsFormsApplication2.Properties.Settings.Default.DBConString);
    }

    // 对应tbPeople表的DbSet,EF通过它操作表数据
    public DbSet<Person> People { get; set; }
}

第二步:重写按钮点击事件的逻辑

现在你可以用EF来替换原来的OleDb代码,逻辑更清晰,还自动处理资源:

private void btn_clicked(object sender, EventArgs e)
{
    // 先清空目标文本框,避免每次点击都追加旧内容
    textboxTest.Text = string.Empty;

    // using块会自动释放上下文资源,不用手动关闭数据库连接
    using (var context = new PeopleDbContext())
    {
        // EF会自动生成参数化查询,彻底避免SQL注入风险!
        var peopleFromCountry = context.People
            .Where(person => person.Country == textbox.Text)
            .ToList();

        // 拼接姓名并显示到文本框
        foreach (var person in peopleFromCountry)
        {
            textboxTest.Text += $"{person.LastName}, {person.FirstName}\n";
        }
    }
}

额外的优化小提示

  • 你的原有代码里有几个大小写错误:textboxTest.text应该是Text(C#大小写敏感),read["lastname"].toString()应该是ToString(),EF版本里已经修正了这些细节。
  • 如果查询的数据量较大,建议用异步查询提升UI响应速度,避免界面卡顿:
    private async void btn_clicked(object sender, EventArgs e)
    {
        textboxTest.Text = string.Empty;
        using (var context = new PeopleDbContext())
        {
            var peopleFromCountry = await context.People
                .Where(person => person.Country == textbox.Text)
                .ToListAsync();
    
            foreach (var person in peopleFromCountry)
            {
                textboxTest.Text += $"{person.LastName}, {person.FirstName}\n";
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:21:23