【问题标题】:EF not recognizing PK of view in OracleEF 无法识别 Oracle 中的视图 PK
【发布时间】: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 吗?

【问题讨论】:

  • 这实际上似乎工作正常

标签: oracle entity-framework view primary-key


【解决方案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://stackoverflow.com/users/1077309/sampath 但列可以为空 EF 不会基于视图创建对象。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      相关资源
      最近更新 更多