1

DB、VS2012、および EF 5.0 として Oracle を使用しています。

テーブルに 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 を追加する必要はありません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

Make sure that the underlying tables queried in the view have PKs or at least a non-nullable column(s) that you can designate in the view. If you use the solution provided by [sampath]: https://stackoverflow.com/users/1077309/sampath but the columns are nullable EF won't create an object based on the view.

In this case can designate the key in DbContext.

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