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

时间:2012-02-01 10:37:39

标签: c# entity-framework

我有两个表,User和TempUsers,我需要对它们进行操作。我已经定义了我的用户类型,我想将它添加到两个表的DbContext中。问题是,它使用约定将类型名称映射到表或使用指定了表名的TableAttribute。无论哪种方式,我都看不到如何添加两个dbset将类型映射到不同的表名。

我可以使用copy + paste或UserBase类以及两个派生的User和TempUser类复制类型。两种方式都可以工作,但实际上我想要处理用户的代码,而不是代码中的用户和TempUsers的复杂性。毕竟,存储库负责任地处理放置用户对象的位置,业务逻辑不应该处理它。

建议将不胜感激。谢谢!

[基于评论的解释]

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

这让我想起了我自己的问题:Querying data using Entity Framework from dynamically created table

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

相关问题