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

时间:2017-05-23 18:47:22

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

要求通过将表名作为参数(在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多个表作为输入参数,并且所有表的结构都相同。

请帮忙。

1 个答案:

答案 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方法:

  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);