FrameWork使用EfCore数据库映射举例

Microsoft.EntityFrameworkCore新的版本不支持FrameWork框架。

这里举例使用旧版本实现数据存取

首先下载

Microsoft.EntityFrameworkCore 版本控制在2.1.14以下

同样下载Microsoft.EntityFrameworkCore.sqlite

举例时间记录

csharp 复制代码
 public class RunTimeInfo
 {
     [Key]
     public int Id { get; set; }

     [Description("统计小时")]
     public DateTime TimeInfo { get; set; }
     [Description("运行时间")]
     public string RunTime { get; set; }
    

     public RunTimeInfo Clone()
     {
         return new RunTimeInfo()
         {
             TimeInfo = this.TimeInfo,
             RunTime = this.RunTime
         };
     }


 }
csharp 复制代码
 public class DynamicModelCacheKeyFactoryRun : IModelCacheKeyFactory
 {
     public object Create(DbContext context)
         => context is EfContextRunInfo dynamicContext
             ? (context.GetType(), dynamicContext.CreateDateTime)
             : (object)context.GetType();
 }
csharp 复制代码
 public class EfContextRunInfo : DbContext
 {
     public DateTime CreateDateTime { get; set; }

     public static string connectionString
     {
         get
         {
             return $"Data Source={Environment.CurrentDirectory}\\RunTime\\{DateTime.Now.ToString("yyyy-MM-dd")}.db";
         }
     }

     public bool IsSave = true;

     public string DynamicConnectionString;

     public DbSet<RunTimeInfo> MdDatas { get; set; }

     public EfContextRunInfo()
     {

     }

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         if (!optionsBuilder.IsConfigured)
         {
             optionsBuilder.UseSqlite(IsSave ? connectionString : DynamicConnectionString).ReplaceService<IModelCacheKeyFactory, DynamicModelCacheKeyFactoryRun>();
         }
     }

     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         modelBuilder.Entity<RunTimeInfo>(entity =>
         {
             entity.ToTable(CreateDateTime.ToString("yyyyMMdd"));

             entity.Property(e => e.Id)
                  .IsRequired()
                  .HasColumnName("Id")
                  .HasColumnType("INTEGER")
                  .ValueGeneratedOnAdd();


             entity.Property(e => e.TimeInfo)
                 .IsRequired()
                 .HasColumnName("TimeInfo")
                 .HasColumnType("DATETIME")
                 ;

             entity.Property(e => e.RunTime)
                   .IsRequired()
                   .HasColumnName("RunTime")
                   .HasColumnType("TEXT")
                   ;
             entity.HasKey("Id");
         });

     }

 }

添加数据,查找数据

csharp 复制代码
  static ConcurrentQueue<RunTimeInfo> runTimeInfo = new ConcurrentQueue<RunTimeInfo>();
    public Form1()
    {
        InitializeComponent();
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        AddRunTimeData();
    }

    public static bool AddRunTimeData()
    {
        using (EfContextRunInfo context = new EfContextRunInfo { CreateDateTime = DateTime.Now })
        {
            try
            {
                if (!Directory.Exists($"{Environment.CurrentDirectory}\\RunTime\\"))
                {
                    // 文件夹不存在则创建
                    Directory.CreateDirectory($"{Environment.CurrentDirectory}\\RunTime\\");
                }

                context.Database.EnsureCreated();
                //RelationalDatabaseCreator databaseCreator = (RelationalDatabaseCreator)context.Database.GetService<IDatabaseCreator>();
                //databaseCreator.CreateTables();
            }
            catch (Microsoft.Data.Sqlite.SqliteException ex)
            {
                //Logger.Debug(ex.Message);
            }
            catch (Exception ex)
            {
               MessageBox.Show(ex.Message);
                return false;
            }

            while (runTimeInfo.TryDequeue(out var mdData))
            {
                context.MdDatas.Add(mdData);
            }

            context.SaveChangesAsync();
        }

        return true;
    }

    private void btnAddData_Click(object sender, EventArgs e)
    {
        runTimeInfo.Enqueue(new RunTimeInfo() { TimeInfo = DateTime.Now, RunTime = "1" });
    }
    List<RunTimeInfo> mdDataList = new List<RunTimeInfo>();
    private void btnQuary_Click_1(object sender, EventArgs e)
    {
        using (EfContextRunInfo context = new EfContextRunInfo { CreateDateTime = DateTime.Now, IsSave = false, DynamicConnectionString = $"Data Source={Environment.CurrentDirectory}\\RunTime\\{DateTime.Now.ToString("yyyy-MM-dd")}.db" })
        {
            try
            {
                context.Database.EnsureCreated();
                var mdDatas = context.MdDatas.Where(md => md.Id>2);


                mdDataList = mdDataList.Union(mdDatas.ToList()).ToList();
            }
            catch (Microsoft.Data.Sqlite.SqliteException ex)
            {
                //Debug.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
               MessageBox.Show(ex.Message);
               
            }
        }
    }
}
相关推荐
档案宝档案管理1 小时前
档案宝:企业合同档案管理的“安全保险箱”与“效率加速器”
大数据·数据库·人工智能·安全·档案·档案管理
wangjialelele2 小时前
mysql库操作二
数据库·mysql
Chloeis Syntax2 小时前
MySQL初阶学习日记(1)--- 数据库的基本操作
数据库·学习·mysql
workflower3 小时前
FDD(Feature Driven Development)特征驱动开发
大数据·数据库·驱动开发·需求分析·个人开发
韩立学长3 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
苦学编程的谢4 小时前
Redis_4_常见命令(完)+认识数据类型和编码方式
数据库·redis·缓存
小光学长4 小时前
基于Vue的儿童手工创意店管理系统as8celp7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
小光学长4 小时前
基于Vue的地铁综合服务管理系统7949eg04(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
Yeats_Liao4 小时前
时序数据库系列(二):InfluxDB安装配置从零搭建
数据库·后端·时序数据库