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

时间:2018-01-24 10:17:32

标签: c# .net entity-framework dynamic odata

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

是否有可能在EF模型中实现这一点,或者我应该在没有它的情况下工作并创建自己的实现来维护数据?

谢谢!

EDIT1: 因此,在检查出EAV模型后,我得出的结论是,如果我理解正确,它不太适合我的需要,因为我的字段不是每个实体的动态,而是对所有实体都是相同的。所以基本上我的表结构是这样的:

客户 {   ID:INT,   名称:字符串 }

Customer_CustomFields {   ID:INT,   客户编号:INT,   UserDefinedName1,   UserDefinedName2,   ... }

这里唯一不同的是UserDefinedName-Column。列的名称设置为用户为自定义字段f.e定义的名称。 “CF_RandomInfo”。此列的类型更改取决于用户为此自定义字段选择的类型(nvarchar(max),float等)。用户定义列的数量也是未知的。

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

1 个答案:

答案 0 :(得分:0)

您可以使用EAV模型link

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

编辑:

OData v4支持opentype link

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

如果你想使用odata的OpenType功能,你必须自己提供属性字典(查看链接中的示例)。所以你需要加入你的基地"具有扩展属性的实体,并将它们选择为字典。

预定义属性方式:

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

-String + Decimal + odata cast + validation几乎涵盖了你需要的每种类型