ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 首先通过将type作为参数传递,在Entity Framework DB中动态实例化Model对象

2019-05-27 14:55:13  阅读:381  来源: 互联网

标签:c asp-net linq entity-framework entity-framework-6


需要通过将表名作为参数(在DB第一种方法中生成的模型并使用EF 6.0)动态创建实体框架生成的Model类的实例

喜欢,

// 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个表作为输入参数并且所有表的结构相同.

请帮忙.

解决方法:

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

// 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方法:

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

Install-Package System.Linq.Dynamic

然后你可以:

var dbSet = dbContext.Set(myDictionary[tableName]).Where("Id = @a", 12);

>使用Find方法:

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

标签:c,asp-net,linq,entity-framework,entity-framework-6
来源: https://codeday.me/bug/20190527/1164023.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有