实体框架在运行时创建多个表 C#

Posted

技术标签:

【中文标题】实体框架在运行时创建多个表 C#【英文标题】:Entity Framework create multiple tables at runtime C# 【发布时间】:2021-12-30 18:46:31 【问题描述】:

我尝试使用 Sqlite 熟悉 EF。

我设法创建了一个模型,并基于该模型使用迁移创建了一个表。

我的问题是如何创建多个相同模型的表?

模型示例:

public class Blog

    public int BlogId  get; set; 
    public string Url  get; set; 

我的应用程序数据库上下文示例:

public class ApplicationDbContext:DbContext

    public string DbPath  get; private set; 

    public DbSet<Blog> Blogs  get; set; 

    public ApplicationDbContext()
    
        DbPath = $"HelloBlog.db";
    

    protected override void OnConfiguring(DbContextOptionsBuilder options)
       => options.UseSqlite($"Data Source=DbPath");


我的问题是如何在运行时添加新表,例如。 Blog_Date?

因为我事先不知道要创建多少张表。

【问题讨论】:

【参考方案1】:

我的问题是如何在运行时添加新表,例如。博客_日期?因为我事先不知道要创建多少张表。

您的数据管理方法存在缺陷;您正在使用表名来存储应该存储在列中的数据

在您的 Blogs 表中有一个 PostedDate 列或类似的列,将您要编码到表名中的任何数据存储到列中。索引列

无论你之前想做什么,比如:

SELECT * FROM Blog_2000_01_01
SELECT * FROM Blog_2000_01_02

应该这样做:

SELECT * FROM Blog WHERE PostedDate = '2000-01-01'
SELECT * FROM Blog WHERE PostedDate = '2000-01-02'

在 EF 术语中是这样的:

context.Blog.Where(b => b.PostedDate == new DateTime(2000,1,1))
context.Blog.Where(b => b.PostedDate == new DateTime(2000,1,2))

【讨论】:

以上是关于实体框架在运行时创建多个表 C#的主要内容,如果未能解决你的问题,请参考以下文章

C# 实体框架 DBContext

实体框架代码的动态连接字符串首先在运行时 EF6(mssql、mysql、oracle)中用于多个数据库提供程序

实体框架手动删除的表不能从EF迁移生成

C#:更改实体框架的检索数据类型

实体框架和经典 Ado.net 之间的单个事务或批量插入操作下的 SqlBulkCopy 多个表插入

在运行时将实体对象添加到 LINQ-to-SQL 数据上下文 - SQL、C#(WPF)