我使用以下代码作为单个表的控制器从我的数据库访问该表,并将每列的值分配给变量。但是,我有很多表(在这种情况下是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);
}
答案 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。