我使用EF Model First,有时导入新视图,并在进行更改后,执行“从模型生成数据库”以构建一个新的干净数据库,我可以将其与生产数据库进行比较,以生成比较脚本,以便我可以作为部署的一部分更新生产数据库。
但是,如果我为新视图“从数据库更新模型”,我会得到一个如下所示的具有实际视图定义的定义查询。到目前为止一切都很好。
<EntitySet Name="vChainSubscriptions" EntityType="Self.vChainSubscriptions" store:Type="Views" store:Schema="dbo">
<DefiningQuery>SELECT
[vChainSubscriptions].[ChainName] AS [ChainName],
[vChainSubscriptions].[ChainActive] AS [ChainActive],
[vChainSubscriptions].[Changed] AS [Changed],
[vChainSubscriptions].[ChangedBy] AS [ChangedBy]
FROM [dbo].[vChainSubscriptions] AS [vChainSubscriptions]</DefiningQuery>
</EntitySet>
然后也许在其他模型更改之后,我想“从模型生成数据库”来创建一个新的临时数据库,我可以将其与旧数据库进行比较,并且我的视图变成了一个表,因为edmx文件已更新为数据库生成过程的一部分!
<EntitySet Name="vChainSubscriptions" EntityType="TxData.Store.vChainSubscriptions" store:Type="Tables" Schema="dbo" />
如何防止这种可怕的行为?从数据库和模型生成模型回到数据库应该往返而不是将我的视图更改为表,而是应该使用“创建视图”而不是“创建表”将新视图创建为视图。