[英]cannot add view to the edmx
嘗試將視圖添加到 edmx 文件時,沒有任何反應。
我使用 wxl 編輯器打開了 edmx 文件,我注意到以下錯誤:
警告 6013:表/視圖“CellularOrders.dbo.V_LINK”沒有定義主鍵,無法推斷出有效的主鍵。 此表/視圖已被排除。 要使用實體,您需要查看架構、添加正確的鍵並取消注釋。
(重要的是 - 我沒有也不需要將視圖基於的表添加到 edmx。此外,該視圖僅用於對數據執行 select 語句)
所以在數據庫中,我更新了 T_LINK 表,並將反映在視圖上的字段之一作為主鍵。 然后,當我再次嘗試將視圖添加到 edmx 時,什么也沒有發生。
我該如何解決這個問題? 有沒有一個選項可以在不對桌子做任何事情的情況下解決這個問題? 我可以添加另一個以某種方式包裝舊視圖但具有固定屬性的視圖嗎?
只需在您的視圖中添加一列我添加了一個 Row_Number 來創建這樣的鍵
SELECT ISNULL(CAST((row_number() OVER (ORDER BY tab.ENTRYDATE)) AS int), 0)
AS EDMXID,...other columns go on
tab 表達式是表別名,entrydate 只是 sql-server 函數中內置的 row_number 所需的字段。
您可以選擇不同的方式,例如
select newid() as MYEDMXID,....so on
希望有幫助
添加到實體 model 的每個表或視圖都必須有一些鍵。 它實際上不必是主鍵。 如果表沒有定義主鍵,EF 將嘗試使用簡單規則推斷鍵:它將采用所有不可為空的非計算非二進制列並將它們標記為實體鍵。 如果不存在這樣的列,則無法自動添加實體,並且設計者將拋出上述警告。 解決方法是手動添加視圖並自己選擇密鑰,但是一旦這樣做,您將無法使用數據庫中的更新,因為它總是會覆蓋您的更改。
您定義的密鑰應該是唯一的,否則您可能會遇到與內部使用的身份 map相關的一些其他問題。
您可以通過將視圖與具有主列的任意表連接起來輕松解決此問題。 只要確保你只從表中抓取一行。
這是一個例子:
CREATE VIEW dbo.myView AS SELECT -- This column enables EF-import via designer by enabling PK generation Id, -- These columns belong to the view [Count], [Sum] FROM ( SELECT COUNT(*) AS [Count],SUM(1) AS [Sum] FROM dbo.myTable ) TheViewItself -- Grab a primary key of a single row from atable INNER JOIN (SELECT TOP 1 Id FROM dbo.TableWithPrimaryKey) Id ON 1 = 1
“ON 1 = 1”連接謂詞看起來很奇怪。 但我需要這個來說服 EF 導入視圖。
僅使用新表與您的視圖鏈接,如果您有超過 100k 行,EF6 不是它更好的解決方案;)
CREATE TABLE dbo.TablePrimate(Id int CONSTRAINT PK_TablePrimate PRIMARY KEY (Id))
go
set nocount on;
DECLARE @i int;
set @i=1
WHILE @i<10000
BEGIN
INSERT dbo.TablePrimate(Id) values(@i)
SET @i = @i + 1
END
--In fews seconds & 1 MB of storage
GO
現在加入“MyView”
CREATE VIEW dbo.vwTickets
AS
SELECT TP.Id, MyPKView.* FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Ticket) Line, MyView.*
FROM (
select Grupo, App, Ticket, Titulo, FApertura, Estado, Tipo from dbo.vwEvolutivos
union
select Grupo, App, Ticket, Titulo, FApertura, Estado, Tipo from dbo.vwIncidencias
) MyView
) MyPKView
JOIN dbo.TablePrimate TP ON TP.Id = Line
您可以使用“ISNULL”function 將您的視圖列之一設置為不可為空,如下所示
ALTER VIEW [dbo].[MyView]
AS
SELECT
ISNULL([StringID],'') AS [Id],
[Name]
FROM [Table]
GO
您可以在數據庫中創建視圖並在代碼中進行如下查詢:
List<users> _users = _context.users.SqlQuery("SELECT * FROM users_v").ToList<users>();
我嘗試添加 PostgreSQl 視圖很長時間但沒有成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.