Принудительный первичный ключ к представлению

У меня есть схема ниже: введите здесь описание изображения
Я попытался создать представление и сделал все, чтобы получить IDStore_CardStore столбец NOT NULL, чтобы сделать его первичным ключом в моем объекте EF, но безуспешно: моя цель - выбрать все в таблице StockCard, даже если он не существует в StockCardStores, но мне нужно, чтобы IDStore_CardStore не было нулевым и уникальным

SELECT  ISNULL(dbo.StockCardsStores.IDStore_CardStore, NEWID()) AS IDStore_CardStore ,
        NULLIF(dbo.StockCard.IDStockCardIndex, NEWID()) AS IDStockCardIndex ,
        dbo.Stores.StoreName ,
        dbo.StockCardsStores.IDPurchaseInvoice ,
        NULLIF(dbo.StockCard.Designation,'')
FROM    dbo.Stores
        INNER JOIN dbo.StockCardsStores ON dbo.Stores.IDStore = dbo.StockCardsStores.IDStore
        RIGHT OUTER JOIN dbo.StockCard ON dbo.StockCardsStores.IDStockCardIndex = dbo.StockCard.IDStockCardIndex

Есть ли другой обходной путь!


person HichemSeeSharp    schedule 25.07.2012    source источник


Ответы (1)


Я думаю, IDStore_CardStore уже не может быть нулевым, потому что это первичный ключ в таблице StockCardStores. Возможно, проблема в том, что IDStore_CardStore может иметь повторяющиеся значения в вашем представлении, что делает невозможным использование первичного ключа представления.

Я не знаю ваших требований, но вы можете подделать первичный ключ для вашего представления, сделав что-то вроде этого в запросе:

SELECT  ROW_NUMBER() OVER (ORDER BY dbo.StockCardsStores.IDStore_CardStore DESC) AS Id_PK, ISNULL(dbo.StockCardsStores.IDStore_CardStore, NEWID()) AS IDStore_CardStore ,
        NULLIF(dbo.StockCard.IDStockCardIndex, NEWID()) AS IDStockCardIndex ,
        dbo.Stores.StoreName ,
        dbo.StockCardsStores.IDPurchaseInvoice ,
        NULLIF(dbo.StockCard.Designation,'')
FROM    dbo.Stores
        INNER JOIN dbo.StockCardsStores ON dbo.Stores.IDStore = dbo.StockCardsStores.IDStore
        RIGHT OUTER JOIN dbo.StockCard ON dbo.StockCardsStores.IDStockCardIndex = dbo.StockCard.IDStockCardIndex

И тогда ID_PK может быть ПК представления в EF.

person Jonathan    schedule 25.07.2012
comment
Проблема в том, что я не могу сделать этот запрос как представление! - person HichemSeeSharp; 25.07.2012
comment
Почему? Какую ошибку выдает EF при импорте представления в модель EF? - person Jonathan; 25.07.2012
comment
О, извините, это ошибка, потому что я пропустил добавление псевдонима к NULLIF(dbo.StockCard.Designation,'') - person HichemSeeSharp; 25.07.2012
comment
цель еще не достигнута.. Объект EF нуждается в ненулевом столбце, чтобы сделать его первичным ключом по умолчанию, но здесь Id_PK по-прежнему равен нулю - person HichemSeeSharp; 25.07.2012