Материализованный вид Entity Framework не отображается в мастере - PullRequest
0 голосов
/ 02 августа 2020

Я использую PostgreSQL 12 с EF6. Я пытаюсь добавить материализованное представление к своей модели, но оно не отображается в мастере модели. Я знаю, что для добавления представления в модель Entity Framework требуется, чтобы хотя бы один столбец в представлении базы данных не допускал значения NULL. Но я не уверен, как это сделать.

Я безуспешно пытался создать уникальный индекс, а также номер строки.

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");

1 Ответ

0 голосов
/ 02 августа 2020

Чтобы сделать этот объект видимым, просто добавьте представление в свою базу данных.

CREATE VIEW stock_view
AS select * from Stock

Примечание. Материализованные представления используются для повышения производительности запросов. Если у вас нет проблем с производительностью, придерживайтесь обычных просмотров. Просто перепишите исходное материализованное представление как обычное, удалив слово materialized.

Чтобы ответить на исходный вопрос о том, как сделать столбец Id в таблице Stock не допускающим значения NULL, вы можете объединить ответы в этом сообщении о переполнении стека с этим следующим образом:

UPDATE pg_catalog.pg_attribute 
SET attnotnull = true
WHERE attrelid = Stock::regclass::oid
 and attname  = 'Id'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...