在EF Code First中,对两个相同的表使用相同的类型

本文关键字:两个 类型 First Code EF | 更新日期: 2023-09-27 18:22:02

我有两个表,Users和TempUsers,我需要对它们进行操作。我已经定义了我的用户类型,我想将其添加到两个表的DbContext中。问题是,它要么使用约定将类型名称映射到表,要么使用指定表名称的TableAttribute。不管怎样,我都看不出如何添加两个dbset,将类型映射到不同的表名。

我可以使用复制+粘贴或通过一个UserBase类和两个派生的User和TempUser类来复制类型。这两种方式都会起作用,但实际上在代码中,我想与Users打交道,而不是在代码中使用Users和TempUsers的复杂性。毕竟,存储库负责处理用户对象的放置位置,而业务逻辑不应该处理它

如有建议,不胜感激。谢谢

[基于评论的解释]

我有两个表的原因是TempUsers支持批量导入/更新,但支持每个用户的原子事务。因此,从外部导出一些活动目录或类似的导出将导致为每个用户调用一个服务。我必须创建/更新用户,找出哪些用户没有被导入,但已经存在于我的数据库中,然后删除它们。截断Users表并直接写入会简单得多,但Id会不同,它会断开用户与不同表的所有链接,例如发货历史

在EF Code First中,对两个相同的表使用相同的类型

这是不可能的。EF不能在同一上下文中两次映射同一类。您的单个User类只能映射到单个上下文类型中的Users表或TempUsers表。您需要两个用户类或两种不同的上下文类型(具有不同的映射配置)——一种提供对Users表的访问,另一种提供了对TempUsers表的访问。

这让我想起了自己的问题:使用实体框架从动态创建的表中查询数据

实际上,您可以使用EF和ExecuteStoreQuery来检索对象,但不能使用EF的LINQ功能。