如何仅使用一个控制器动态检索表?

时间:2016-02-03 16:08:00

标签: c# sql-server asp.net-mvc odbc

我使用以下代码作为单个表的控制器从我的数据库访问该表,并将每列的值分配给变量。但是,我有很多表(在这种情况下是Booktrans),我想使用一个控制器,它可以使用表ID作为变量访问所有表。之后,从不同的表中分配不同列的值也将与下面的代码不同。任何人都可以用“动态”编码方式帮助我用动态控制器替换特定表格的控制器吗?

我正在使用MVC4。

所有表都有不同的结构和不同的列名。

public ActionResult Booktrans()
{
    String connectionString = "Dsn=SECURE;Uid=internwebuser";
    OdbcConnection conn = new OdbcConnection(connectionString);
    String sql = "SELECT * FROM booktrans";
    OdbcCommand cmd = new OdbcCommand(sql, conn);

    var model = new List<Booktrans>(); 

    using (conn)
    {
        conn.Open();
        OdbcDataReader rdr = cmd.ExecuteReader();
        //model = new List<Booktrans>();
        while (rdr.Read())
        {
            var book = new Booktrans();
            book.ship_last_name = rdr["ship_last_name"].ToString();
            book.ship_first_name = rdr["ship_first_name"].ToString();
            book.ship_zip = rdr["ship_zip"].ToString();
            book.ship_state = rdr["ship_state"].ToString();
            book.ship_address = rdr["ship_address"].ToString();
            book.ship_city = rdr["ship_city"].ToString();
            book.day_phone = rdr["day_phone"].ToString();
            book.email_address = rdr["email_address"].ToString();


            model.Add(book);
        }

    }
    return View(model);
}

1 个答案:

答案 0 :(得分:0)

你如何使用实际的ORM,因为那是你在这里试图进行逆向工程的。使用Entity Framework之类的东西,您可以创建一个映射到特定表的实体类,该实体类具有映射到该表中列的属性。然后,特别是使用Entity Framework,您可以将DbSet表示此表中的行集合添加到您的上下文中:

public DbSet<Foo> Foos { get; set; }

然后,您可以简单地使用API​​实体框架提供与该数据进行交互:

// Get specific Foo
var foo = db.Foos.Find(id);

// Get matching Foos
var foos = db.Foos.Where(m => m.Bar == "bar");

// Add a new Foo
db.Foos.Add(new Foo { Bar = "bar" });

等等。像NHibernate这样的其他ORMS有不同的设置和API,但它们基本上都表现相同,并且不要求你担心生成SQL。