在运行时创建表
本文关键字:创建 运行时 | 更新日期: 2023-09-27 18:12:25
我是数据库的新手,我不知道如何处理这种情况。我用这种方式连接了3个表:
Session <- 1:1 -> Document <- 1:1 -> DocumentData
所以基本上总是有1个Session
有一个Document
有一个DocumentData
。
我希望能够向DocumentData
添加不同类型和列的数据,因此,例如,我可以让DocumentData
具有类型为DateTime
, Int32
, Int32
的3列。然后有另一个表,有5列类型Datetime
, double
, Int32
, Int32
, Int32
。基本上我要做的就是在我的代码中有这样的东西:
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实体,这样我可以保存到数据库。
可以使用SQL语句在运行时创建表(通过dbcontext)。我认为在数据库/上下文初始化后,在运行时将这样的表绑定到实体/类是不可能的。
但是,如果您不必使用不同的/变量列作为查询/选择参数,只需在单个BLOB列中序列化文档类,就可以完成。