8

次の表があります。

create table tbl
(
    id int identity(1,1),
    val varchar(100)
)

Entity Frameworkを使用してオブジェクトをこのテーブルにマップすると機能しますが、次のようにテーブル定義を変更すると機能します。

create table tbl1
(
    id int,
    val varchar(100)
)

Entity Framework は、オブジェクトをこのテーブルにマップしません。なぜこれが起こっているのかについての手がかりをいただければ幸いです。

4

2 に答える 2

9

Entity Framework では、データベースからモデルを生成するために主キーが必要です。テーブルに主キーがない場合、null 非許容列が連結された主キーとして選択され、エンティティは読み取り専用になります。

最初のテーブル ID 定義では、id 列が null 不可になるため、エンティティを作成できました。そのテーブルを追加しているときに、次のメッセージが表示されるはずです。

「テーブル/ビュー 'tbl1' には主キーが定義されていません。キーは推測され、定義は読み取り専用のテーブル/ビューとして作成されました。」

ただし、2番目のテーブルにはnull不可の列がなく、EFはそのエンティティを作成できません。追加しようとすると、次のメッセージが表示されます。

「テーブル/ビュー 'tbl1' には主キーが定義されておらず、有効な主キーを推測できませんでした。このテーブル/ビューは除外されています。エンティティを使用するには、スキーマを確認し、正しいキーを追加する必要があります。コメントを外してください。」

于 2012-10-16T04:56:11.233 に答える
0

エンティティ フレームワークは通常、テーブル内の 2 つのレコードを区別する方法を必要とするため、主キー制約、一意キー制約、または DB 層での ID である必要のない ID/キー識別子が必要です。ただし、この識別子 (列または列のセット) は、エンティティ フレームワークがレコードを一意に識別し、他のレコードと区別するのに役立ちます。そのため、C# レイヤーのエンティティ クラスでそのような識別子を定義する必要があります。

于 2012-10-16T04:58:15.100 に答える