.Net核心中的动态模型

时间:2018-09-25 09:46:42

标签: c# .net-core entity-framework-core

.Net core 2.1。

Asset Table -> Id, Name, Path, AssetType(Enum -> user, company), ParentEntityId

我有资产表,其中包含多个其他表(例如,用户,公司,部门)的媒体文件。由于资产对于所有实体都保持完全相同,因此合理的做法是创建一次并动态定义关系。因此,实体是根据AssetType和ParentEntityId来获取的,这意味着无法定义用于获取子实体的关系,也无法使用包括和user.Asset这样的默认函数来定义资产。

所以我的问题是

    .li核心是否提供任何开箱即用的方式来处理动态实体 正在加载。
  • 如果不是,那么解决这种情况的最佳方法是什么。

用户拥有图像或文档,公司也可以使用。在设计表之前。

User -> UserAsset
Company -> CompanyAsset

,而UserAsset和CompanyAsset都是具有外键差异的副本,因为UserAsset具有UserId而CompanyAsset具有CompanyId。越来越多的实体将具有相同的资产需求。如果继续相同的路径,将有7个资产表,它们的数据完全相同,只有Foregin Key的差异。因此,我想是否可以将它们合并在一起以避免出现多个表。这就是为什么拥有单个资产表更有意义的原因。

1 个答案:

答案 0 :(得分:1)

  

由于所有实体的资产都完全相同,因此合理地创建一次并动态定义关系是合理的。

啊...不。我不知道是谁设计了您的数据库,但这是错误的。期。那不是针对任何形式的规范化的数据库设计。在要关联的实体之间没有外键。

您应该有一个资产表。那有一个AssetId主键。

如果要将公司连接到资产,则它可以具有AssetId字段外键(如果它具有0-1资产),也可以具有另一个表,其中CompanyId和AssetId作为外键(如果它具有0) -n资产或什至nm(如果一项资产可以属于多个公司)。如果用户也有资产,则可以像创建公司表一样创建用户表,并引用相同的资产表。

通过适当的数据库设计,实体框架将按需工作。