大家早上好,
我正在使用 ASP.NET-MVC , C#, EF 和<进行 AngularJS 项目strong> SQL Express DB。
我有一个 HTML 页面调用一些AngularJS函数调用MyController.cs
上的一些函数。
在MyController.cs
中我使用 EF 来完成很多功能。
在我的数据库中,我有数百个具有相同列的表。
我希望每个表都有相同的HTML页面,因此执行具有不同名称的相同功能
例如,当我转到http://..../Index/TABLE1
链接时,MyController.cs
会是这样的:
public ActionResult getCaptions()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = 500000000;
var data =
_db
.TABLE1
.OrderBy(i => i.CodeId)
.ToArray();
return Content(serializer.Serialize(data).ToString(), "application/json");
}
当我转到http://..../Index/TABLE2
链接时,MyController.cs
看起来像是:
public ActionResult getCaptions()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = 500000000;
var data =
_db
.TABLE2
.OrderBy(i => i.CodeId)
.ToArray();
return Content(serializer.Serialize(data).ToString(), "application/json");
}
我考虑过这样的解决方案:
在控制器
上声明一个全局变量tableName
修改Index ActionResult
public ActionResult Index(string id)
{
tableName = id;
return View();
}
现在我被卡住了......
需要任何帮助,谢谢。
编辑:如果你投票,你至少可以解释一下原因吗?感谢
答案 0 :(得分:1)
我看到你@aBennouna可能已经放弃了这个问题,但我对这个问题感兴趣并决定需要一个解决方案。它可能不是您要求的100%,因为在这里您不能将表名作为字符串参数。
首先,如果所有表都具有相同的列,则可以从同一个基础继承它们:
public class TableBase
{
[Key]
public int CodeId { get; set; }
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public int Prop3 { get; set; }
}
使用此基础我们可以定义表格:
public class Table1 : TableBase
{
}
public class Table2 : TableBase
{
}
// etc...
这使我们能够编写像@CodeCaster建议的通用 GetCaptions 方法(感谢正确方向的推动):
public ActionResult GetCaptions<T>() where T : TableBase
{
var set = db.Set<T>();
// get all objects to array
var list = set.OrderBy(i => i.CodeId).ToList();
// serialize and return result
// OR get single object and a value
var item = set.FirstOrDefault();
var propertyValue = item.Prop1;
}
<强>用法:强>
GetCaptions<Table1>();
GetCaptions<Table2>();