我是数据库的新手,我不知道如何处理这种情况。我有3个表以这种方式连接:
Session <- 1:1 -> Document <- 1:1 -> DocumentData
所以基本上总有一个Session
有一个Document
,其DocumentData
。
我希望能够向DocumentData
添加不同类型和数据的列,例如,我可以DocumentData
包含3列DateTime
,Int32
列Int32
。然后让另一个表格包含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实体,这样我就可以将它们保存到数据库中。
答案 0 :(得分:0)
您可以使用SQL语句在运行时创建表(通过dbcontext)。在初始化数据库/上下文之后,我认为不可能在运行时将这样的表绑定到实体/类。
但是,如果您不必使用不同/变量列作为查询/选择参数,只需在单个BLOB列中序列化文档类并完成。