c# - 使用动态数据结构构建 OData EF 模型

标签 c# .net entity-framework dynamic odata

是否可以在动态结构的基础上创建 EF 模型? F.e.我有一个客户,它可以有系统管理员定义的自定义字段。 基于此,与客户相关的自定义字段表正在更改,并为新定义的字段添加了一个新列。

有没有可能在 EF 模型中实现它,或者我应该在没有它的情况下工作并自己实现以维护数据?

谢谢!

编辑1: 因此,在查看 EAV 模型后,我得出结论,如果我理解正确的话,它不太适合我的需求,因为我的字段不是每个实体都是动态的,但对所有实体都是一样的。所以基本上我的表结构是这样的:

客户 { 编号:整数, 名称:字符串

Customer_CustomFields { 编号:整数, 客户编号:整数, 用户定义名称 1, 用户定义名称 2, ...

此处唯一不同的是 UserDefinedName-Column。列的名称设置为用户为自定义字段 f.e. 定义的名称。 “CF_RandomInfo”。此列的类型根据用户为此自定义字段选择的类型(nvarchar(max)、float 等)而变化。用户定义的列数也是未知的。

我想知道我是否可以将这种结构作为 Contained OpenType 实现到客户类中?

最佳答案

您可以使用 EAV 模型 link .

但是!如果您可以做出“不超过 XX 个字符串属性”这样的假设,则可以在模型中保留此属性,如 StringProperty1、StringProperty2...(Microsoft 通常将此方法用于用户定义的属性)并在您的 EDM 级别启用/重命名它们数据服务。

编辑:

OData v4 支持开放类型 link .

但您仍然必须将动态属性存储在数据库中 EAV 是 SQL 库中最方便的方法 - 您只需存储每个表/实体类型允许的属性和类型。

如果你想使用 odata 的 OpenType 特性,你必须自己提供属性字典(查看链接中的示例)。因此,您需要将具有扩展属性的“基础”实体加入到字典中。

预定义属性方式:

-column 方式不会改变,您只需在 EDM 或 EF 级别通过 fluentAPI 更改名称

-String + Decimal + odata casting + validation 涵盖了几乎所有你需要的类型

关于c# - 使用动态数据结构构建 OData EF 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48419939/

相关文章:

javascript - 如何在 Neutronium 库中执行 javascript?

c# - 相当于openssl中的PasswordDeriveBytes

c# - 如何将代理身份验证详细信息添加到 webclient 对象

c# - 以图像的实际大小获取鼠标的真实位置,而不是鼠标在 PictureBox 中的位置

c# - CreateFile、FILE_FLAG_BACKUP_SEMANTICS、目录管理和句柄

c# - 在 .NET Framework 类库项目中安装 Entity Framework Core 2.0 会产生无效引用

c# - 将 C# 程序移动到不同的语言

wcf - 如何在一项服务或 DAL 中使用多个数据库(MSSQL)?

c# - Entity Framework 不保存所有更改

entity-framework - 如何在 Entity Framework 中启用单独的审计表