EF 无法识别 Oracle 中的视图 PK

Posted

技术标签:

【中文标题】EF 无法识别 Oracle 中的视图 PK【英文标题】:EF not recognizing PK of view in Oracle 【发布时间】:2012-12-19 15:29:13 【问题描述】:

我使用 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 吗?

【问题讨论】:

这实际上似乎工作正常 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

试试下面不加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

希望对你有帮助。

【讨论】:

@CraigStuntz 是的,但使用 NOVALIDATE 键。这可能是问题所在。我已经更新了我的帖子。会看到吗?【参考方案3】:

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

这种情况下可以指定DbContext中的key。

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

【讨论】:

以上是关于EF 无法识别 Oracle 中的视图 PK的主要内容,如果未能解决你的问题,请参考以下文章

Oracle批量插入数据时报字段无法识别错误

c++程序中,无法识别中文路径怎么办

plsql developer无法识别32位oracle问题如何解决?

Swift:手势识别器无法识别的选择器发送到实例

从实体框架中的 Oracle 视图未添加。不是主键

appdesign中的函数或变量参数无法识别