学海无涯

导航

EntityFrameworkCore 配置

Nuget引用组件:

Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

 连接字符串 appsetting.json

 "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-DABHN6U\\MSSQLSERVER2014;uid=sa;pwd=Lz38275292;database=SPA;MultipleActiveResultSets=true;"
  },

  在Program.cs中注册

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

定义数据库上下文

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using SPA.Shared.Appointment;
using SPA.Shared.BasicInformation;
using SPA.Shared.Finance;
using SPA.Shared.Member;
using SPA.Shared.Reports;
using SPA.Shared.Stock;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SPA.Dal
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions options) : base(options)
        {

        }

        public DbSet<MemberInfo> Members { get; set; }
        public DbSet<SearchMemberInfo> SearchMembers { get; set; }
        public DbSet<MemberAccountInfo> MemberAccounts { get; set; }
        public DbSet<MemberAccountBindingItemInfo> MemberAccountBindingItemInfos { get; set; }
        public DbSet<RunningWaterAccountInfo> RunningWaterAccounts { get; set; }
        public DbSet<EmployeeInfo> Employees { get; set; }
        public DbSet<AppointmentResourceInfo> AppointmentResources { get; set; }
        public DbSet<AppointmentInfo> Appointments { get; set; }
        public DbSet<AppointmentViewInfo> AppointmentView { get; set; }
        public DbSet<StatuseInfo> Statuses { get; set; }
        public DbSet<AppointmentLabelInfo> AppointmentLabels { get; set; }
        public DbSet<UserInfo> Users { get; set; }
        public DbSet<Log> Logs { get; set; }
        public DbSet<ShopInfo> Shops { get; set; }
        public DbSet<AppointmentRoomInfo> AppointmentRooms { get; set; }
        public DbSet<CardHistoryConsumptionInfo> CardHistoryConsumptionInfos { get; set; }
        public DbSet<SalesOrderDetailsInfo> SalesOrderDetailsInfos { get; set; }
        public DbSet<StockInfo> StockInfos { get; set; }
        public DbSet<MemberLevelInfo> MemberLevelInfos { get; set; }
        public DbSet<RemindInformationInfo> RemindInformationInfos { get; set; }
        public DbSet<RemindCategoryInfo> RemindCategoryInfos { get; set; }
        public DbSet<ProductInfo> ProductInfos { get; set; }
        public DbSet<ProductCategroyInfo> ProductCategroyInfos { get; set; }
        public DbSet<BrandInfo> BrandInfos { get; set; }
        public DbSet<ServiceItemInfo> ServiceItemInfos { get; set; }
        public DbSet<ServiceItemCategoryInfo> ServiceItemCategoryInfos { get; set; }
        public DbSet<CardInfo> CardInfos { get; set; }
        public DbSet<CardCategoryInfo> CardCategoryInfos { get; set; }
        public DbSet<CardBindingItemsInfo> CardBindingItemsInfos { get; set; }
        public DbSet<AnotherNameInfo> AnotherNameInfos { get; set; }
        public DbSet<EmployeePerformanceInfo> EmployeePerformanceInfos { get; set; }
        public DbSet<PostInfo> PostInfos { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            options.EnableSensitiveDataLogging(true);//错误信息中启用敏感数据记录
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            //设置组合主键
            List<string> keys = new List<string>();
            keys.Add(nameof(CardHistoryConsumptionInfo.会员编号));
            keys.Add(nameof(CardHistoryConsumptionInfo.流水号));
            keys.Add(nameof(CardHistoryConsumptionInfo.销售单明细ID));
            modelBuilder.Entity<CardHistoryConsumptionInfo>().HasKey(keys.ToArray());

            keys = new List<string>();
            keys.Add(nameof(StockInfo.年));
            keys.Add(nameof(StockInfo.月));
            keys.Add(nameof(StockInfo.会所编号));
            keys.Add(nameof(StockInfo.仓库编号));
            keys.Add(nameof(StockInfo.物品编号));
            modelBuilder.Entity<StockInfo>().HasKey(keys.ToArray());

            keys = new List<string>();
            keys.Add(nameof(AnotherNameInfo.表名));
            keys.Add(nameof(AnotherNameInfo.字段名));
            modelBuilder.Entity<AnotherNameInfo>().HasKey(keys.ToArray());

            keys = new List<string>();
            keys.Add(nameof(EmployeePerformanceInfo.流水号));
            keys.Add(nameof(EmployeePerformanceInfo.员工编号));
            modelBuilder.Entity<EmployeePerformanceInfo>().HasKey(keys.ToArray());

            // 配置表名映射
            modelBuilder.Entity<MemberInfo>().ToTable(MemberInfo.TableName);
            modelBuilder.Entity<MemberAccountInfo>().ToTable(MemberAccountInfo.TableName);
            modelBuilder.Entity<MemberAccountBindingItemInfo>().ToTable(MemberAccountBindingItemInfo.TableName);
            modelBuilder.Entity<RunningWaterAccountInfo>().ToTable(RunningWaterAccountInfo.TableName);
            modelBuilder.Entity<AppointmentResourceInfo>().ToTable(AppointmentResourceInfo.TableName);
            modelBuilder.Entity<AppointmentInfo>().ToTable(AppointmentInfo.TableName);
            modelBuilder.Entity<AppointmentViewInfo>().ToView(AppointmentViewInfo.TableName);
            modelBuilder.Entity<StatuseInfo>().ToTable(StatuseInfo.TableName);
            modelBuilder.Entity<AppointmentLabelInfo>().ToTable(AppointmentLabelInfo.TableName);
            modelBuilder.Entity<UserInfo>().ToTable(UserInfo.TableName);
            modelBuilder.Entity<ShopInfo>().ToTable(ShopInfo.TableName);
            modelBuilder.Entity<EmployeeInfo>().ToTable(EmployeeInfo.TableName);
            modelBuilder.Entity<AppointmentRoomInfo>().ToTable(AppointmentRoomInfo.TableName);
            modelBuilder.Entity<SearchMemberInfo>().ToTable(SearchMemberInfo.TableName);
            modelBuilder.Entity<Log>().ToTable(Log.TableName);
            modelBuilder.Entity<CardHistoryConsumptionInfo>().ToTable(CardHistoryConsumptionInfo.TableName);
            modelBuilder.Entity<SalesOrderDetailsInfo>().ToTable(SalesOrderDetailsInfo.TableName);
            modelBuilder.Entity<StockInfo>().ToTable(StockInfo.TableName);
            modelBuilder.Entity<MemberLevelInfo>().ToTable(MemberLevelInfo.TableName);
            modelBuilder.Entity<RemindInformationInfo>().ToTable(RemindInformationInfo.TableName);
            modelBuilder.Entity<RemindCategoryInfo>().ToTable(RemindCategoryInfo.TableName);
            modelBuilder.Entity<ProductInfo>().ToTable(ProductInfo.TableName);
            modelBuilder.Entity<ProductCategroyInfo>().ToTable(ProductCategroyInfo.TableName);
            modelBuilder.Entity<BrandInfo>().ToTable(BrandInfo.TableName);
            modelBuilder.Entity<ServiceItemInfo>().ToTable(ServiceItemInfo.TableName);
            modelBuilder.Entity<ServiceItemCategoryInfo>().ToTable(ServiceItemCategoryInfo.TableName);
            modelBuilder.Entity<CardInfo>().ToTable(CardInfo.TableName);
            modelBuilder.Entity<CardCategoryInfo>().ToTable(CardCategoryInfo.TableName);
            modelBuilder.Entity<CardBindingItemsInfo>().ToTable(CardBindingItemsInfo.TableName);
            modelBuilder.Entity<AnotherNameInfo>().ToTable(AnotherNameInfo.TableName);
            modelBuilder.Entity<EmployeePerformanceInfo>().ToTable(EmployeePerformanceInfo.TableName);
            modelBuilder.Entity<PostInfo>().ToTable(PostInfo.TableName);


        }
    }
}

  客户端使用

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SPA.Shared.Member;
using SPA.Shared.CustomEnum;
using System.Data.Entity.Core.Objects;
using SPA.Shared;

namespace SPA.Dal.Member
{
    public class MemberDal
    {
        ApplicationDbContext db;
        public MemberDal(ApplicationDbContext db)
        {
            this.db = db;
        }

        public async Task<List<MemberInfo>> GetListAsync(SearchPageMemberInfo info)
        {
            List<MemberInfo> list = new List<MemberInfo>();
            string sql = GetPageSql(info);
            var result = db.Members.FromSqlRaw(sql);
            list = await result.Skip((info.PageIndex - 1) * info.PageSize).Take(info.PageSize).AsNoTracking().ToListAsync();
            return list;
        }
        private string GetPageSql(SearchPageMemberInfo info)
        {
            string sql = $"SELECT * FROM {MemberInfo.TableName} where {info.GetSqlWhere()} ";
            return sql;
        }
        public async Task<int> GetCountAsync(SearchPageMemberInfo info)
        {
            string countSql = $"SELECT 会员编号 FROM {MemberInfo.TableName} Where {info.GetSqlWhere()} ";
            int count = await db.Members.FromSqlRaw(countSql).CountAsync();
            return count;
        }
        public async Task<MemberInfo?> GetModelAsync(string code)
        {
            string sql = "select top 1 * FROM View_HY会员档案 where " + GetWhereBy(code);
            MemberInfo? model = await db.Members.FromSqlRaw<MemberInfo>(sql).FirstOrDefaultAsync();
            return model;
        }
        public string GetWhereBy(string code)
        {
            string sqlWhere = $" (会员编号 = '{code}' OR 姓名 LIKE '%{code}%' OR 手机 = '{code}'  OR 简码 LIKE '%{code}%' OR 会员卡编号 = '{code}' OR 会员卡表面号 = '{code}')";
            return sqlWhere;
        }
        /// <summary>
        /// 查询会员自动完成数据源
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public async Task<List<SearchMemberInfo>> Search(string value)
        {
            if (string.IsNullOrEmpty(value))
                return new List<SearchMemberInfo>();

            StringBuilder sqlWhere = new StringBuilder();
            sqlWhere.AppendFormat(" (会员编号='{0}' OR 姓名 LIKE '%{0}%' OR 手机 = '{0}'  OR 简码 LIKE '%{0}%' OR 会员卡编号='{0}' OR 会员卡表面号='{0}')", value.Trim());
            string sql = $"select top 7 会员编号,姓名,简码,手机,会员卡表面号 FROM View_HY会员档案 where 会员状态={Convert.ToInt32(MemberStatus.正常)} AND " + sqlWhere.ToString();
            var result = await db.SearchMembers.FromSqlRaw<SearchMemberInfo>(sql).ToListAsync();
            if (result != null)
            {
                result.ForEach(x => x.SetDisplayText());
            }
            return result;
        }
        /// <summary>
        /// 得到会员级别
        /// </summary>
        /// <returns></returns>
        public async Task<List<MemberLevelInfo>> GetMemberLevelInfoList()
        {
            List<MemberLevelInfo> list = await db.MemberLevelInfos.ToListAsync();
            List<MemberLevelInfo> resultList = new List<MemberLevelInfo>();
            resultList.Add(new MemberLevelInfo
            {
                编号 = ConstHelper.ALL_NO.ToString(),
                名称 = ConstHelper.ALL,
                分段起始值 = 0,
                分段终止值 = 0,
                备注 = String.Empty,
                级别图形 = String.Empty,
            });
            resultList.AddRange(list);
            return resultList;
        }
    }
}

  

posted on 2022-09-15 09:47  宁静致远.  阅读(44)  评论(0编辑  收藏  举报