【问题标题】:Entity framework materialized view not showing in wizard实体框架物化视图未显示在向导中
【发布时间】:2020-08-03 22:17:22
【问题描述】:

我正在使用带有 EF6 的 PostgreSQL 12。我正在尝试将物化视图添加到我的模型中,但该视图未在模型向导中列出。我知道能够将视图添加到模型中,实体框架需要数据库视图中的至少一列不可为空。但我不知道该怎么做。

我尝试创建唯一索引和行号,但没有成功。

CREATE MATERIALIZED VIEW "Stock"
AS

SELECT coalesce(cast(ROW_NUMBER() OVER() as int), 0) as "Id",
    "PartMaster"."PartID",
    "OEMPart"."PartCatalogID",
    "PartMaster"."PartCode",
    "PartCatalog"."CustomPartCode",
    "OEMPart"."OEMCode",
    "PartMaster"."PartDesc",
    "GoodsReceivedDetail"."Cost",
    "GoodsReceivedDetail"."Markup",
    "GoodsReceivedDetail"."SellingPrice",
    coalesce("GoodsReceivedDetail"."Quantity", 0) as "InQuantity",
    coalesce("InvoiceDetail"."Quantity", 0) as "OutQuantity", 
    coalesce("GoodsReceivedDetail"."Quantity", 0) - coalesce("InvoiceDetail"."Quantity", 0) as "StockQuantity"
FROM
    "PartCatalog"
INNER JOIN
    "PartMaster"
ON
    (
        "PartCatalog"."PartID" = "PartMaster"."PartID")
INNER JOIN
    "OEMPart"
ON
    (
        "PartCatalog"."PartID" = "OEMPart"."PartID")
INNER JOIN
    "GoodsReceivedDetail"
ON
    (
        "OEMPart"."PartCatalogID" = "GoodsReceivedDetail"."PartCatalogID")
LEFT OUTER JOIN
    "InvoiceDetail"
ON
    (
        "GoodsReceivedDetail"."PartCatalogID" = "InvoiceDetail"."PartCatalogID")
INNER JOIN
    "PartCategory"
ON
    (
        "PartMaster"."PartCategoryID" = "PartCategory"."PartCategoryID") ;
        
CREATE UNIQUE INDEX "Id"
  ON "Stock" ("PartCatalogID");

【问题讨论】:

标签: postgresql entity-framework materialized-views


【解决方案1】:

要使该对象可见,只需将视图添加到您的数据库。

CREATE VIEW stock_view
AS select * from Stock

注意:物化视图用于提高查询性能。如果您没有性能问题,请坚持常规视图。只需通过删除单词materialized 将原始物化视图重写为常规视图即可。

要回答关于如何使表Stock 中的列Id 不可为空的原始问题,您可以将答案组合在 this Stack Overflow postthis one 如下:

UPDATE pg_catalog.pg_attribute 
SET attnotnull = true
WHERE attrelid = Stock::regclass::oid
 and attname  = 'Id'

【讨论】:

  • 感谢 Lars 的建议。我已经尝试过给定的解决方案(更改表格),但向导仍然没有显示视图。
  • 我明白了。您确定您正在查看正确的架构吗?您的股票视图是在未指定的情况下创建的,因此它将使用默认视图。
  • 我更新了我的问题,其中包含有关如何在结构顶部创建视图的说明,这引出了为什么需要物化视图的问题。它们应该用于性能。如果您没有查询性能问题,只需使用视图即可。
  • 谢谢拉尔斯。普通视图在向导中可见。但如果您找到物化视图的解决方案,请更新问题。
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
相关资源
最近更新 更多