在运行时创建表

时间:2016-10-09 12:31:55

标签: c# wpf ado.net entity-framework-6

我是数据库的新手,我不知道如何处理这种情况。我有3个表以这种方式连接:

Session   <- 1:1 ->   Document   <- 1:1 ->   DocumentData

所以基本上总有一个Session有一个Document,其DocumentData

我希望能够向DocumentData添加不同类型和数据的列,例如,我可以DocumentData包含3列DateTimeInt32Int32。然后让另一个表格包含5列类型DatetimedoubleInt32Int32Int32。基本上我想要的是在我的代码中有这样的东西:

using(var unit = new UnitOfWork(new SessionContext()))
{
    var data = unit.Sessions.GetCurrent().Document.DocumentData;    
    var row = data.Column[0].Rows[5]... etc.
}

这是因为DocumentData是由用户指定的csv生成的,因此每个DocumentData都由不同的列组成。

修改 我想知道如何在运行时创建一个表并分配我想要的任何列。所以我希望能够做到这样的事情:

var doc = new Document();
session.Document = doc;
doc.Columns.Add(new Column() {Rows = rows});
doc.Columns.Add(new Column() {Rows = rows2});
doc.SaveChanges();

然后让第二个表有不同的列。

EDIT2: 为了更清楚,我想转换它:

public class DocumentData {
  public List<DocumentColumn> Columns { get; set; }
}

public class DocumentColumn {
  public string ColumnName { get; set; }
  public List<object> Rows { get; set; }
}

进入ado.net实体,这样我就可以将它们保存到数据库中。

1 个答案:

答案 0 :(得分:0)

您可以使用SQL语句在运行时创建表(通过dbcontext)。在初始化数据库/上下文之后,我认为不可能在运行时将这样的表绑定到实体/类。

但是,如果您不必使用不同/变量列作为查询/选择参数,只需在单个BLOB列中序列化文档类并完成。