要求通过将表名作为参数(在DB第一种方法中生成的模型并使用EF 6.0)动态创建实体框架生成的Model类的实例
喜欢,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform for everything -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- copy the stuff from bbb -->
<xsl:template match="aaa[following-sibling::ddd]/bbb">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<!-- then include the embedded ddd -->
<xsl:copy-of select="aaa/following-sibling::ddd" />
</xsl:copy>
</xsl:template>
<!-- note the empty template for ddd is gone -->
</xsl:stylesheet>
需要传递100多个表作为输入参数,并且所有表的结构都相同。
请帮忙。
答案 0 :(得分:6)
您可以使用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方法:
将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);