2012-12-19 52 views
1

我正在使用Oracle作爲DB,VS2012和EF 5.0。EF無法識別Oracle中的視圖PK

我知道表中有一個PK(組合鍵),我創建

create view v_table_name as select * from table_name 

視圖當我嘗試添加視圖以EF,它說,沒有PK,使只讀對象。我試圖在視圖中添加PK,但它告訴我table can have only on primary key

我用下面的

ALTER VIEW V_TABLE_NAME 
ADD CONSTRAINT V_V_TABLE_NAME_PK PRIMARY KEY (DRSY, DRRT, DRKY) DISABLE NOVALIDATE; 

任何想法,爲什麼EF是不承認的PK?

+0

這實際上似乎工作正常 –

回答

1

因爲EF並不推斷視圖的PK,據我所知。

如果在table_name上有PK,那麼實際上並不需要將PK添加到視圖中。

你只需要tell EF what the key column(s) are.

0

嘗試以下沒有NOVALIDATE

ALTER VIEW V_TABLE_NAME 
ADD CONSTRAINT V_V_TABLE_NAME_PK PRIMARY KEY (DRSY, DRRT, DRKY) DISABLE ; 

NOVALIDATE Issue

您可以通過下面的鏈接提到做到這一點。

adding primary key to Oracle view

我希望這會幫助你。

+0

他已經做到了。這是在問題。 –

+0

@CraigStuntz是的,但與NOVALIDATE鍵。可能是這個問題。我已經更新了我的帖子。將會看到? – Sampath

0

確保在視圖中查詢的基礎表具有PK或至少一個可在視圖中指定的非空值列。如果您使用[sampath]提供的解決方案:https://stackoverflow.com/users/1077309/sampath,但列可以爲空,則EF不會基於該視圖創建對象。

在這種情況下,可以指定DbContext中的鍵。

modelBuilder.Entity<EntityName>().HasKey(e => new {e.KeyCol1, e.KeyCol2,  e.KeyCol3});