如何使用具有相同列

时间:2015-10-29 14:20:43

标签: c# entity-framework

大家早上好,

我正在使用 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();
}
  

现在我被卡住了......

需要任何帮助,谢谢。

编辑:如果你投票,你至少可以解释一下原因吗?感谢

1 个答案:

答案 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>();