1

我使用 Oracle 作为 DB、VS2012 和 EF 5.0。

我知道该表有一个 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 吗?

4

3 回答 3

1

因为据我所知,EF 不会为视图推断 PK。

如果 PK 上有 PK,您实际上不必将 PK 添加到视图中table_name

您只需要告诉 EF 关键列是什么。

于 2012-12-19T15:33:26.763 回答
0

在没有 NOVALIDATE 的情况下尝试以下

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

NOVALIDATE 问题

您可以按照下面提到的链接进行操作。

将主键添加到 Oracle 视图

我希望这对你有帮助。

于 2012-12-19T15:37:05.763 回答
0

确保在视图中查询的基础表具有 PK 或至少一个您可以在视图中指定的不可为空的列。如果您使用 [sampath] 提供的解决方案:https ://stackoverflow.com/users/1077309/sampath但列可以为空 EF 不会基于视图创建对象。

在这种情况下可以在 DbContext 中指定键。

modelBuilder.Entity<EntityName>().HasKey(e => new {e.KeyCol1, e.KeyCol2,     e.KeyCol3});
于 2016-01-27T13:27:50.143 回答