同一项目中的EF Core和EF 6.x

时间:2018-02-07 17:22:42

标签: entity-framework asp.net-identity

我相信你可以在同一个项目中同时拥有EF Core和EF 6,但是,我很难让迁移工作

该项目以EF4开始,并已发展为EF6。迁移工作正常。

我添加了EF Core,因为我们在解决方案中添加了一个新的AspNet Core网站。现在我有一个单独的Context for Core.Identity。

有没有人真正在现实生产网站上做过这个,或者我只是在浪费时间?

更新: 这是我现在拥有的。 一个数据项目,其EntityContext指向EF 6,数据库具有100多个表。

我添加了一个新网站,IT有一个使用EF Core的实体上下文。我只关心AspNet核心身份。

两个上下文都指向同一个DB。我现在可以为每个指向每个上下文的每个上下文运行迁移。

问题是上下文都不知道对方。如果我在第一个上下文中有一个需要引用AspNetUsers表的对象,我就无法链接它。我的感觉是这不容易做到。

1 个答案:

答案 0 :(得分:0)

可以完成EF6和EFCore上下文的一种“链接”,但是你需要决定你愿意接受的耦合程度。以下是一些选项:

<强> 1。使用ASP.NET核心标识UserManager 您的EF6实体已经拥有用户ID,因此您使用UserManager.Find将相关用户放入内存。然后,您必须匹配内存中的实体,这只有在两个上下文(直接或间接)都可以访问用户实体时才有效。但好处是你的背景永远不会相互衔接,并且能够轻松地独立发展。

<强> 2。参考EF6环境中的AspNetUsers 您将为AspNetUsers添加一个新实体和DbSet,然后创建一个新的迁移并从Up()和Down()中删除所有内容。这将模仿该实体的“数据库优先”,因此不会无意中更新。这增加了并发问题的可能性 - 取决于您的身份设置 - 您需要编写如何解决的问题。此外,如果有更改,您必须手动更新实体(并创建更多空的迁移)。但好处是您可以轻松地从EF6上下文中引用AspNetUsers表。

除了共享2个实体或2个上下文之外,任何其他方法都会使这些方法中的任何一个不合适,然后需要类似域事件的事情。