1

Entity Framework 5.0 とパワー ツールを使用して、小さなデータベースをリバース エンジニアリングしました。それから私はウェブサイトの開発を始めました。テーブルの 1 つで ID 列を IDENTITY 列にするのを忘れていたため、問題が発生しました。

そこで、コード ファースト マイグレーションを追加し、パッケージ マネージャー コンソールで update-database コマンドを使用して実行しました。これが私が書いた「Up」メソッドです。

    public override void Up()
    {
        Sql("DELETE FROM dbo.Sections");
        Sql("DELETE FROM dbo.QuestionInstances");

        DropForeignKey("dbo.SectionInstances", "SectionID", "dbo.Sections");
        DropForeignKey("dbo.QuestionInstances", "SectionID", "dbo.Sections");

        DropTable("dbo.Sections");

        CreateTable(
            "dbo.Sections",
            c => new
            {
                ID = c.Int(nullable: false, identity: true),
                UniqueDescription = c.String(nullable: false, maxLength: 50),
                Heading = c.String(maxLength: 500),
            })
            .PrimaryKey(t => t.ID);

        AddForeignKey("dbo.SectionInstances", "SectionID", "dbo.Sections");
        AddForeignKey("dbo.QuestionInstances", "SectionID", "dbo.Sections");
    }

データベースを確認したところ、正常に変更されています。

エンティティ フレームワークがモデルを更新し、ID の明示的な設定を停止することを期待していましたが、保存しようとすると次のエラーが表示されるため、間違っているように見えます:「テーブル 'セクション' の ID 列に明示的な値を挿入できません」 IDENTITY_INSERT が OFF に設定されている場合」

列が ID 列になったことをエンティティ フレームワークに認識させるにはどうすればよいですか?

4

1 に答える 1

4

Id 列がまだ IDENTITY として設定されていないときにデータベースをリバース エンジニアリングしたDatabaseGeneratedOption.Noneため、エンティティの Id プロパティに設定されたコード ファースト モデルが生成されました。

これにより、EF は Id セットを使用して挿入ステートメントを作成しますが、列を IDENTITY に変更すると機能しなくなります。

DatabaseGeneratedOption.Identity整数フィールドのデフォルト値であるため、設定するか、完全に削除して、手動でその構成を修正する必要があります。

于 2013-03-28T10:53:17.300 に答える