我在动态表上遇到问题,或者用户将在Web应用程序中创建表并在之后插入记录。如何在运行时创建模型而不知道用户输入的列数。 EF可以支持这个问题吗?
实施例
我有1个tablename用于tablename,然后textbox2用于数字列 输入列数后,它将动态创建列名的文本框,然后用户将保存它。
答案 0 :(得分:0)
不确定,但我担心你不能这样做。但你可以模拟它:
CodeFirst的类:
public class Table
{
public int Id{get;set;}
public string Name {get;set;}
public ICollection<Column> Columns {get;set;}
public ICollection<Row> Rows {get;set;}
}
public class Row
{
public int Id{get;set;}
public ICollection<ColumnValueBase> Values {get;set;}
}
public abstract class Column
{
public int Id {get;set;}
public Column Column {get;set;}
}
public abstract class ColumnValue
{
public int Id {get;set;}
}
public class IntColumn : Column
{
public IntColumnValue IntValue {get;set;}
}
// other types of columns and values
public class TablesContext : DbContext
{
public DbSet<Table> Tables {get;set;}
}
我在项目中使用了类似的方法,但效果很好。通过迁移可以轻松添加新类型的列。唯一的问题可能是性能 - this是我的问题,但EF Core应该更快。