我得到了一个Visual Studio解决方案,可以重新启动并运行以进行开发。该项目首先使用Entity Framework数据库。当我从数据库生成模型时,SQL希望将所有视图转换为表。我知道使用EF应该避免使用视图,但是鉴于开发人员不再为我们工作,解决此问题的最佳方法是什么?
谢谢
我得出的结论是,没有办法将edmx中的视图实体重新创建回实际的sql server数据库视图。需要发生的是,您将从模型中生成sql并在sql server management studio查询分析器中运行该sql。删除创建的本应为视图的表,并找出要写入的查询以按原样在sql server中重新创建视图。一旦完成,运行“从数据库更新”后,模型中的视图应该很好,并在那里进行更新。
假设您有两个表格-类别和产品。您要创建一个名为ProductsWithCategoryName的视图。当您从数据库进行更新并且此视图被添加到您的EDMX文件中时,查看XML将显示以下内容:
<EntitySet Name="ProductsWithCategoryName" EntityType="NorthwindModel.Store.ProductsWithCategoryName" store:Type="Views" store:Schema="dbo" store:Name="ProductsWithCategoryName">
<DefiningQuery>
SELECT
[ProductsWithCategoryName].[ProductID] AS [ProductID],
[ProductsWithCategoryName].[ProductName] AS [ProductName],
[ProductsWithCategoryName].[UnitsInStock] AS [UnitsInStock],
[ProductsWithCategoryName].[CategoryName] AS [CategoryName]
FROM [dbo].[ProductsWithCategoryName] AS [ProductsWithCategoryName]
</DefiningQuery>
</EntitySet>
上面的问题是,定义查询不是创建该视图的查询。为了获得正确的定义查询,您必须通过手动向其添加适当的查询来实际编辑EDMX文件,如下所示:
<EntitySet Name="ProductsWithCategoryName" EntityType="NorthwindModel.Store.ProductsWithCategoryName" store:Type="Views" store:Schema="dbo" store:Name="ProductsWithCategoryName">
<DefiningQuery>
SELECT dbo.Products.ProductID, dbo.Products.ProductName, dbo.Products.UnitsInStock, dbo.Categories.CategoryName
FROM dbo.Categories INNER JOIN
dbo.Products ON dbo.Categories.CategoryID = dbo.Products.CategoryID
</DefiningQuery>
</EntitySet>
这仍然不能为您提供创建适当的sql视图的预期结果。从概念到数据库,基本上EF仅针对每个实体生成一张表,而视图仅被视为另一个实体。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句