ef core 使用 .net core web api 自带的DI


以 SqlServer 为例

安装 Microsoft.EntityFrameworkCore.SqlServer 包

1 定义实体

    /// 
    /// 实体类
    /// 
    public class SysUserEntity
    {
        /// 
        /// Id
        /// 
        public string Id { get; set; }
        /// 
        /// 用户账号
        /// 
        public string UserCode { get; set; }
        /// 
        /// 用户名
        /// 
        public string UserName { get; set; }
    }

2 定义实体与表的映射关系

    /// 
    /// 实体与表映射类
    /// 
    public class SysUserMap : IEntityTypeConfiguration
    {
        public void Configure(EntityTypeBuilder builder)
        {
            builder.ToTable("SysUser");
            builder.HasKey(c => c.Id);
        }
    }

3 定义数据库上下文类

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;

namespace CAP.UserService
{
    public class UserDbContext : DbContext
    {
        public UserDbContext(DbContextOptions options)
            : base(options)
        {
        }

        public DbSet SysUsers { get; set; }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);

            #region 直接写实体与表的映射关系
            //builder.Entity(entity =>
            //{
            //    entity.ToTable("SysUser");
            //    entity.HasKey(x => x.Id);
            //});
            #endregion

            #region 通过映射类定义实体与表的映射关系
            builder.ApplyConfiguration((dynamic)Activator.CreateInstance(typeof(SysUserMap)));
            #endregion
        }
    }
}

4 在Startup中的 ConfiguServices 注册

            services.AddDbContext(options =>
            {
                options.UseSqlServer(ConfigurationHelper.GetSection("DatabaseConnectionStrings:SqlServer"));
            });

5 测试

        [HttpGet]
        public IActionResult TestEFCore()
        {
            var user = new SysUserEntity { Id = "U2", UserCode = "UserCode2", UserName = "UserName2" };
            _userDbContext.SysUsers.Add(user);
            _userDbContext.SaveChanges();

            return Ok();
        }