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的主要内容,如果未能解决你的问题,请参考以下文章