ASP.NET Core MVC 5应用程序在不同的Postgres数据库中运行。所有数据库中的表名都相同。所有数据库中的基本列名和类型都相同。
表还可以包含在使用创建应用程序后添加到数据库中的其他列
ALTER表mytable ADD COLUMN mycol TYPE mytype
命令。
这些附加的列名和类型在不同的数据库中是不同的。
自定义列列表也存储在表Datadictionary中,该表包含表名、自定义列名和自定义列类型。
这些列应该在视图中显示给用户。视图应动态检测添加的列显示,并允许更改其内容。
如何从这些列中获取数据并允许用户更改它们?
我正在考虑两种可能性:
- 创建从Varcoltable类派生的、具有附加列的类,编译该类,并传入DbContext
尝试
var ctx = new MyDbContext();
dynamic list = ctx.Varcoltables.FromSqlRaw("select * from varcoltable");
but got error.
添加类似的属性
Dictionary<string,object> CustomColumns; into base entity class and fill it with custom column values. public class Varcoltables : EntityBase { } public class EntityBase { public Dictionary<string,object> CustomColumns; }
尝试使用动态作为子类:
class Varcoltable : dynamic { }
但出现编译错误"无法从动态类型派生">
如何实现?是否有一些框架源代码、文档或示例来实现这一点。
FromSqlRaw只能用于获取特定类型的查询(无论Varcoltables是什么(;EF Core不知道你的额外专栏,因此无法处理。更普遍地说,您试图绕过EF Core(通过自己添加列(,并使用它来访问修改后的表——这通常是行不通的。
请注意,EF Core有自己的继承映射功能,您可以使用它来实现与上面非常相似的功能——请参阅文档。有什么理由对你不起作用吗?