C# Net内核中的动态模型

C# Net内核中的动态模型,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,.Net核心2.1 Asset Table -> Id, Name, Path, AssetType(Enum -> user, company), ParentEntityId 我有资产表,其中包含多个其他表(例如用户、公司、部门)的媒体文件。由于资产对于所有实体都保持完全相同,所以一次创建资产并动态定义关系是合理的。因此,实体是基于AssetType和ParentEntityId获取的,这意味着不可能定义用于获取子实体和使用默认函数(如包括和user)的关系。Asset无法工作

.Net核心2.1

Asset Table -> Id, Name, Path, AssetType(Enum -> user, company), ParentEntityId
我有资产表,其中包含多个其他表(例如用户、公司、部门)的媒体文件。由于资产对于所有实体都保持完全相同,所以一次创建资产并动态定义关系是合理的。因此,实体是基于AssetType和ParentEntityId获取的,这意味着不可能定义用于获取子实体和使用默认函数(如包括和user)的关系。Asset无法工作

所以我的问题是

  • NETCore是否提供了任何现成的方法来处理动态实体 装载
  • 如果不是,处理这种情况的最佳方法是什么
用户有图像或文档,公司也有。在桌子被设计成这样之前

User -> UserAsset
Company -> CompanyAsset
虽然UserAsset和CompanyAsset都是副本,但只有外键不同,因为UserAsset有UserId,CompanyAsset有CompanyId。越来越多的实体进入系统,它们将具有相同的资产需求。如果继续相同的路径,将有7个资产表,数据完全相同,只有Foregin键不同。所以我想如果我能把它们合并在一起,以避免有多个表。这就是为什么拥有单一资产表更有意义

由于资产对于所有实体都保持完全相同,所以一次创建资产并动态定义关系是合理的

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

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

如果您希望一个公司连接到资产,它可以具有AssetId字段外键(如果它具有0-1个资产),也可以具有另一个以CompanyId和AssetId作为外键的表(如果它具有0-n个资产,或者当一个资产可以属于多个公司时,甚至是n-m)。如果用户也有资产,则可以像处理公司表一样创建用户表,并引用相同的资产表


通过正确的数据库设计,实体框架将按需要工作。

谁设计了该数据库?这不是“动态的”,从DB设计的角度来看,这完全是错误的。如果你的数据库设计正确,EF会很好地使用它。你能用例子解释你的问题吗?我有0-n关系。因此,如果我有三个实体,我将创建三个不同的表来保存asset->entity数据。1-(Assetid,公司ID),2-(Assetid,用户ID)和3(Assetid,部门ID)。我理解对了吗?是的。这是确保具有关键约束的数据库级别完整性的唯一方法。但如果必须这样做,则考虑到0-n关系,不使用不同的资产表是更好的选择。取决于您想要什么。。。如果资产实际上只绑定到一个实体,而您从未对所有资产进行过查询,那么可能。这肯定会奏效。