如何使用EntityFrameworkCore为一个表设置多个多对多关系

时间:2018-04-26 04:42:46

标签: sql-server entity-framework-core asp.net-core-2.0

我目前正在开发一个CMS项目,我们需要在整个后端编辑内容时跟踪用户的活动。活动,例如创建,更新或删除内容。我知道如何实现这种活动跟踪,但我无法找到如何在代码中重现这一点的解决方案。这部分项目还没有代码,但这里是组件的概述:

项目在.NET Core 2中,DB是MSSQL。 DbContext是使用dotnet ef scaffold命令(DB-first)创建的。目前,用户可以编辑三种主要内容类型:事件,文章和页面,每个在数据库中都有自己的表。我存储用户活动的想法是在一个名为UserActivity的表中,我希望它看起来像这样:

UserActivity
--------------------
userId (int)
activityTypeId (int)
recordId (int)
recordTypeId (int)
date (datetime)

activityTypeId将映射到UserActivityType表,其中包含“已创建”,“已更新”,“已删除”等记录。recordTypeId将映射到1 = Article2 = Event3 = Page

我不确定我是否可以正确解释我的问题,但是在EntityFrameworkCore中是否可以设置Event,Article和Page实体,每个实体与UserActivity实体具有多对多关系,并具有{{ 1}}列作为外键和recordTypeId列的值约束?它甚至可以在MSSQL中使用吗?为了使这个问题更清楚,这里有一些示例条目。

假设我有ID x的文章记录,ID y的事件记录和ID z的Page记录。 因此,UserActivity表中的一些示例记录将是:

recordId

我知道此问题还有其他解决方案,例如为每个文章,事件和页面内容类型创建单独的活动表,但理想情况下我想在一个表中跟踪这个,理想情况下我会喜欢使用linq select语句,它会自动映射到它们的导航属性。

另一种解决方案是将每种内容类型的外键列添加到UserActivity表中,例如userId | activityTypeId | recordId | recordTypeId | date -------------------------------------------------------------- 99 | 1 | x | 1 | 2018-04-15 97 | 2 | x | 1 | 2018-04-14 99 | 1 | y | 2 | 2018-04-13 97 | 3 | y | 2 | 2018-04-12 99 | 2 | z | 3 | 2018-04-11 97 | 2 | z | 3 | 2018-04-10 articleIdeventId。但是,随着我们添加的内容类型越来越多,列数将会增加,并且可能会变得混乱。

非常感谢任何反馈和建议!

0 个答案:

没有答案