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

ashx实现的Web端点升级.NET Core时EF Core适配问题咨询

EF Core 手动适配现有数据库方案

前置说明

EF Core 完全支持手动映射现有数据库(Database First 模式),不需要依赖 scaffolding 工具自动生成代码,两张表的场景手动编写映射的成本极低,远低于排查工具报错或学习额外框架知识的成本。

手动编写 EF Core 映射示例

第一步:安装依赖

  • 仅需安装 SQL Server 对应的 EF Core 驱动包即可:
    Microsoft.EntityFrameworkCore.SqlServer

第二步:编写实体类

按你的实际表结构编写对应的C#类即可,以下为示例:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

// 第一张表对应实体,可替换为你的实际表字段
public class Table1
{
    // 标注主键,若为自增主键需加DatabaseGenerated特性
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [MaxLength(50)]
    public string Field1 { get; set; }
    public int Field2 { get; set; }
    public DateTime? CreateTime { get; set; }
}

// 第二张表对应实体
public class Table2
{
    [Key]
    public Guid UniqueId { get; set; }
    public int RelatedTable1Id { get; set; }
    [MaxLength(200)]
    public string Remark { get; set; }
    // 不需要导航属性可直接删除
    public Table1 RelatedTable1 { get; set; }
}

第三步:编写 DbContext

using Microsoft.EntityFrameworkCore;

public class CustomDbContext : DbContext
{
    // 注册两张表的操作集合
    public DbSet<Table1> Table1s { get; set; }
    public DbSet<Table2> Table2s { get; set; }

    // 配置数据库连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 替换为你的实际SQL Server连接字符串
        optionsBuilder.UseSqlServer("Data Source=你的实例地址;Initial Catalog=你的库名;User ID=账号;Password=密码;TrustServerCertificate=True");
    }

    // 可选:用Fluent API配置映射,不想在实体上加特性可以用这种方式
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 示例:指定表名、字段映射规则
        modelBuilder.Entity<Table1>(t =>
        {
            t.ToTable("你的第一张表实际名称");
            t.Property(x => x.Field1).HasColumnName("表中对应字段名").IsRequired();
        });

        modelBuilder.Entity<Table2>(t =>
        {
            t.ToTable("你的第二张表实际名称");
            t.HasOne<Table1>(x => x.RelatedTable1).WithMany().HasForeignKey(x => x.RelatedTable1Id);
        });
    }
}

第四步:简单调用示例

// 查询操作
using (var db = new CustomDbContext())
{
    var table1List = db.Table1s.Where(x => x.Field2 > 10).ToList();
}

// 新增操作
using (var db = new CustomDbContext())
{
    db.Table1s.Add(new Table1
    {
        Field1 = "测试数据",
        Field2 = 20,
        CreateTime = DateTime.Now
    });
    db.SaveChanges();
}

备选方案:原生SQL实现

如果不想引入EF Core的复杂度,直接使用Microsoft.Data.SqlClient包编写原生SQL即可,两张表的场景维护成本极低:

using Microsoft.Data.SqlClient;
using System.Collections.Generic;

public static class SqlHelper
{
    private const string ConnectionString = "你的SQL Server连接字符串";

    // 查询示例
    public static List<Table1> QueryTable1()
    {
        var result = new List<Table1>();
        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
            var cmd = new SqlCommand("SELECT Id,Field1,Field2,CreateTime FROM 你的表名 WHERE Field2>@Threshold", conn);
            cmd.Parameters.AddWithValue("@Threshold", 10);
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    result.Add(new Table1
                    {
                        Id = reader.GetInt32(nameof(Table1.Id)),
                        Field1 = reader.GetString(nameof(Table1.Field1)),
                        Field2 = reader.GetInt32(nameof(Table1.Field2)),
                        CreateTime = reader.IsDBNull(nameof(Table1.CreateTime)) ? null : reader.GetDateTime(nameof(Table1.CreateTime))
                    });
                }
            }
        }
        return result;
    }

    // 执行增删改示例
    public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
    {
        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
            var cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddRange(parameters);
            return cmd.ExecuteNonQuery();
        }
    }
}

内容的提问来源于stack exchange,提问作者Alireza Ahmadi Rad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:27:00