C# wpf 根据数据库一键生成大量模型类(支持sqllite、Access、Sqlserver)

23 篇文章 3 订阅

软件下载

源码下载

使用流程

  1. 存放数据库到对应DataBase文件夹
    在这里插入图片描述
  2. 打开软件点击确认
    在这里插入图片描述
  3. 在output文件夹可以看到对应模型类
    在这里插入图片描述
    在这里插入图片描述

MainWindowViewModel

using AutoGenerate.Dal;
using AutoGenerate.Helper;
using GalaSoft.MvvmLight.Command;

using PropertyChanged;
using SqliteTest.Helper;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Windows.Input;

namespace AutoGenerate.ViewModel
{
    [AddINotifyPropertyChangedInterface]
    public class MainWindowViewModel 
    {
        private ObservableCollection<string> lisTableName;

        private ObservableCollection<Object> lisBaseModels;

        private ObservableCollection<object> dgvShow;

        private ObservableCollection<string> lisCmbDBNames;

        private Dictionary<string,List<FieldModel>> fields = new Dictionary<string, List<FieldModel>>();

        public ICommand BtnCmd { get; }

        public MainWindowViewModel()
        {
            LisCmbDBNames = new ObservableCollection<string>(GetFilesNames("./DataBase"));

            BtnCmd = new RelayCommand<string>(BtnCMD);
        }

        private void BtnCMD(string obj)
        {
            Singletion<GeneralDal>.Instance.SetDb(new DBSelector(new DBConfig(obj)));
            LisTableName = new ObservableCollection<string>(Singletion<GeneralDal>.Instance.GetTableNames());
            Fields.Clear();
            foreach (string item in LisTableName)
            {
                Fields.Add(item, Singletion<GeneralDal>.Instance.GetFields(item));
            }

            AutoGenerateModel au = new AutoGenerateModel(Singletion<GeneralDal>.Instance.DbName, Fields);
        }

        private static IEnumerable<string> GetFilesNames(string path, string extensions = ".db|.mdf|.mdb")
        {
            string[] tmp = extensions.Split('|');

            return new DirectoryInfo(path).GetFiles("*").Select(x => x.Name)
             .Where(f => extensions.Contains(Path.GetExtension(f).ToLower()));
        }

        public ObservableCollection<object> DgvShow
        {
            get
            {
                return dgvShow;
            }

            set
            {
                dgvShow = value;
            }
        }

        public ObservableCollection<string> LisTableName
        {
            get
            {
                return lisTableName;
            }

            set
            {
                lisTableName = value;
            }
        }

        public ObservableCollection<object> LisBaseModels
        {
            get
            {
                return lisBaseModels;
            }

            set
            {
                lisBaseModels = value;
            }
        }

        public Dictionary<string, List<FieldModel>> Fields
        {
            get
            {
                return fields;
            }

            set
            {
                fields = value;
            }
        }

        public ObservableCollection<string> LisCmbDBNames
        {
            get
            {
                return lisCmbDBNames;
            }

            set
            {
                lisCmbDBNames = value;
            }
        }
    }
}

核心代码

using AutoGenerate.Dal;

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace AutoGenerate.Helper
{
    class AutoGenerateModel
    {

        public event EventHandler EventModelAutoGenerateSuccess;

        public AutoGenerateModel(string dbName, Dictionary<string, List<FieldModel>> Fields)
        {
            string outputPath = $"./Output/{dbName}/Models";

            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }

            foreach (KeyValuePair<string, List<FieldModel>> item in Fields)
            {
                string fileName = $"Model_{item.Key}.cs";

                string filePath = $"{outputPath}/{fileName}";

                using (StreamWriter sw = File.CreateText(filePath))
                {
                    
                    sw.WriteLine("using System;\r\n");
                    sw.WriteLine("namespace AutoGenerate.Model\r\n{");
                    sw.WriteLine($"\tpublic class Model_{item.Key}: DBModelBase");
                    sw.WriteLine("\t{");

                    foreach (FieldModel item2 in item.Value)
                    {
                        sw.WriteLine("\t\tprivate " + item2.GetStrType()+" _"+item2.FieldName+";\r\n");
                    }

                    foreach (FieldModel item2 in item.Value)
                    {
                        sw.WriteLine("\t\tpublic " + item2.GetStrType() + " " + item2.FieldName + "\r\n\t\t{");
                        sw.WriteLine("\t\t\tget\r\n\t\t\t{");
                        sw.WriteLine($"\t\t\t\treturn _{item2.FieldName};");
                        sw.WriteLine("\t\t\t}");
                        sw.WriteLine("\t\t\tset\r\n\t\t\t{");
                        sw.WriteLine($"\t\t\t\t_{item2.FieldName}=value;");
                        sw.WriteLine("\t\t\t}");
                        sw.WriteLine("\t\t}");
                        sw.WriteLine("");
                    }
                    sw.WriteLine("\t}");
                    sw.WriteLine("}");
                }
            }

            MessageBox.Show("导出成功");

            if(EventModelAutoGenerateSuccess != null)
            {
                EventModelAutoGenerateSuccess(new object(),new EventArgs());
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou.cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值