Entity Framework Core 中的动态数据模型

Posted

技术标签:

【中文标题】Entity Framework Core 中的动态数据模型【英文标题】:Dynamic Data Model in Entity Framework Core 【发布时间】:2020-08-31 08:16:08 【问题描述】:

我有一个用户可以在运行时修改的数据库模型:

向现有表添加新列 添加新表

我想使用 Entity Framework Core 来访问这样的模型。

我能够使用反射为新表和字段创建类型,但我无法在 DbContext 类中为这些新类型创建 DbSet 成员,因为 DbSet 需要在编译时知道类型。

有谁知道这是否可以通过 EF Core 实现? 一种将类型动态注入 DbSet 成员的方法?

【问题讨论】:

不,EF 绝对不是解决此问题的正确工具。使用 Dapper。 【参考方案1】:

在我看来,用户是在运行时定义表及其列、关系等的人,这听起来很奇怪。可能您实际需要的是具有支持动态数据的表结构,这更易于管理,即定义 UserModels 的表,定义这些模型的属性的另一个表等。这会有很大的不同根据您的需要。

您还可以考虑使用一些特殊属性,如此处建议的 XML 数据类型字段:Dynamically adding a property to an entity framework object

【讨论】:

用户可以在应用程序中定义其数据模型,从而在数据库级别创建新字段和新表。我们知道底层数据库模型的结构,理想情况下希望在 EF Core 中创建一个动态上下文来访问它。 是的,但我指的是重新思考获得类似结果的方法,就像这里建议的那样:codeproject.com/Articles/839640/… 否则,如果您仍然使用实际的表创建/更新,您可以使用像 Dapper 这样的 Micro ORM 稍后对其进行查询,这将更加灵活。 dapper-tutorial.net/dapper

以上是关于Entity Framework Core 中的动态数据模型的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Core 2 中的 ConnectionString 生成器

根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性

Entity Framework Core 中的动态数据模型

Entity Framework Core 中的动态查询执行

无法更新 Entity Framework Core 中的标识列

ASP.NET Core 和 Entity Framework Core:Linq 中的左(外)连接