gpt4 book ai didi

c# - 首先通过将类型作为参数传递来动态实例化 Entity Framework 数据库中的模型对象

转载 作者:太空狗 更新时间:2023-10-30 00:37:51 32 4
gpt4 key购买 nike

需要通过将表名作为参数传递来动态创建 Entity Framework 生成的模型类的实例(在数据库优先方法中生成模型并使用 EF 6.0)

喜欢,

// Input Param
string tableName

// Context always same
DBContext dbContext= new DBContext();

//Need to create object query dynamically by passing
//table name from front end as below

IQueryable<"tableName"> query = dbContext."tableName ";

需要传递 100 多个表,因为所有表的输入参数和结构都相同。

请帮忙。

最佳答案

您可以使用 Dictionary .也许你想要这样的东西:

// Input Param
string tableName = "TblStudents";
Dictionary<string, Type> myDictionary = new Dictionary<string, Type>()
{
{ "TblStudents", typeof(TblStudent) },
{ "TblTeachers", typeof(TblTeacher) }
};

// Context always same
DBContext dbContext = new DBContext();
DbSet dbSet = dbContext.Set(myDictionary[tableName]);

但是您不能不使用任何 LINQ 扩展方法,因为它们是在泛型类型上定义的 IQueryable<T>但是 DbContext.Set 的非泛型重载, 返回一个非泛型 DbSet .此类还实现了非通用 IQueryable .此处有两种使用 LINQ 方法的选项:

  1. 添加 System.Linq.Dynamic 到您的项目(要安装 System.Linq.Dynamic,请在包管理器控制台中运行以下命令):

    Install-Package System.Linq.Dynamic

    然后你可以:

    var dbSet = dbContext.Set(myDictionary[tableName]).Where("Id = @a", 12);
  2. 使用 Find方法:

    //But this returns a single instance of your type
    var dbSet = dbContext.Set(myDictionary[tableName]).Find(12);

关于c# - 首先通过将类型作为参数传递来动态实例化 Entity Framework 数据库中的模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44142775/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com