好吧,我一直在努力与这一天,这里是为那些寻求答案的解决方案...
我假设大多数人阅读这篇文章在这里是因为他们有一个大的DbContext类有很多DbSet <>属性,加载需要很长时间。你可能想过给自己,哎呀,这是有道理的,我应该分裂的背景下,因为我不会使用所有dbsets的一次,我只会根据我需要的情况下加载“部分”上下文它。所以你把它们分开,只是为了发现Code First迁移不支持你的革命思维方式。
因此,您的第一步必须分割上下文,然后为每个新上下文添加MigrationConfiguration类,您添加了与新的上下文类完全相同的连接字符串。
于是你试着运行一个新分裂上下文的一,通过做添加迁移CONTEXT1然后做更新,数据库-Verbose ...
一切似乎都做工精细,但后来你发现,每一个后续迁移从先前的迁移中删除了所有表,并且只从最后一次迁移中留下表。
这是因为,目前的迁移模型预计每个数据库单的DbContext,它必须是一个镜子比赛。
我也试过,有人建议在这里做这个,创建一个SuperContext,其中包含所有的Db集合。创建一个Migration Configuration类并运行它。保留部分Context类,并尝试实例化并使用它们。 EF抱怨Backing模型已经改变。同样,这是因为EF会将您的部分dbcontext与您的Super Context迁移中剩余的All-Sets上下文签名进行比较。
这是我认为的一个主要缺陷。
就我而言,我决定PERFORMANCE比迁移更重要。所以,我最终做的是,在我运行超级上下文并拥有所有表格后,我进入数据库并手动删除_MigrationHistory表。
现在,我可以实例化并使用我的部分上下文,而不用EF抱怨它。它没有找到MigrationHistory表,只是继续前进,让我有一个数据库的“部分”视图。
当然,折衷是对模型的任何更改都必须手动传播到数据库,所以要小心。
它虽然为我工作。
这是一个非常有趣的问题。我想知道是否有多个上下文支持是移植用例的一部分。 – 2012-02-02 19:31:45
我非常怀疑多上下文可以使用自动迁移,它旨在更新数据库以使其看起来像上下文无论如何。您可能有更多的运气使用手动迁移来开发插件,针对单独的数据库生成迁移,然后将它们全部应用于相同的数据库。 – Betty 2012-02-04 02:11:28
与此同时,我偷看了EF 4.3程序集,并且我也怀疑迁移框架能够应对多种情况。但是我没有想到的技术原因。使用EDM模型,您可以将其与数据库进行比较,找到现有表格表创建或更改,并通过手动迁移给用户保留删除方案。 – 2012-02-05 11:39:53