1

このスレッドの答えは私にとってはうまくいきません。

この注釈を顧客クラスの PK に配置します。

public class Customer
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

データベースの移行により、新しく追加されたデータ注釈に対して次の 1 行を示す構成が作成されます。

AlterColumn("dbo.Customers", "Id", c => c.Int(nullable: false));

移行を実行し、SQL Server Management Studio でテーブルを確認します。顧客 Id 列には、まだ ID 仕様があり、Is ID があります。私は何を間違っていますか?

ありがとう。

4

2 に答える 2

2

あなたは何も悪いことをしていません。SQL Serverでは既存の列のIDENTITYを変更できないため、これは移行の制限です(または、バグと見なすことができます)。新しい列にのみ設定できます。Management StudioでID値を変更すると、一時テーブルと多くのデータ操作を含む複雑なSQLバッチが内部的に実行されます。

最も簡単な解決策は、データベースを削除し、最初の移行からID定義を削除することです。それ以外の場合は、SQLプロファイラーを使用して、列のID値を変更するときにSQL Management Studioが実行していることを確認し、移行での代わりにそのSQLを使用しますAlterColumn

于 2013-02-21T18:36:45.243 に答える
1

EF は Id フィールドを PK として扱い、PK には一意の値が必要です。それがアイデンティティ仕様の意味です。表の列のプロパティ

DatabaseGeneratedOption.None を設定すると、ID が DB エンジンによって生成されないことが指定されるだけであり、それを提供する必要があります (これは良い考えではないと思います)。

于 2013-02-21T14:48:42.620 に答える