是否可以在动态结构的基础上创建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实现到客户类中?
答案 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几乎涵盖了你需要的每种类型