これが最も理想的なソリューションではないことはわかっていますが、EF Code Firstオブジェクトの1つに自動インクリメントフィールドを追加する必要があります。この列IDはIDではなく、GUIDです。
とにかくコードで自動増分フィールドを定義することはできますか、列を自分で作成し、DBでその自動増分が機能することを定義しますか?
DatabaseGenerated(DatabaseGeneratedOption.Identity)
でそのプロパティに注釈を付けることができます。 EFでは、テーブルごとに1つのID列のみが許可されます。
public class Foo
{
[Key]
public Guid Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Bar { get; set; }
}
古い投稿は、私が見つけたものをEntity Framework 6.1.3と共有すると思っていました。
C#と.NET Framework 4.6.1を使用して簡単なデータレイヤーライブラリを作成し、簡単なリポジトリ/サービスクラス、コードファーストコンテキストクラスを追加し、web.configファイルがローカルのSQL Express 2014データベースを指すようにしました。
エンティティクラスでは、次の属性コンストラクタをId列に追加しました。
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
次に、Visual Studio 2015パッケージマネージャーで次のように入力して、新しい移行を作成しました。
追加移行
移行に名前を付け、DbMigtationクラスが作成されるのを待ちます。クラスを編集し、次のCreateTable操作を追加します。
CreateTable(
"dbo.Article",
c => new
{
Id = c.Guid(nullable: false, identity: true),
Title = c.String(),
Content = c.String(),
PublishedDate = c.DateTime(nullable: false),
Author = c.String(),
CreateDate = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id);
}
上記の表は例です。ここで重要なのは、次のビルダーアノテーションです。
nullable: false, identity: true
これはEFに列をnullabeでないと指定し、EFによってシードされるID列として設定するように指示します。
次のコマンドを使用して移行を再度実行します。
update-database
これにより、移行クラスが実行され、最初にテーブルが削除され(Down()メソッド)、次にテーブルが作成されます(Up()メソッド)。
ユニットテストを実行し、データベースに接続して選択クエリを実行します。新しいフォームにテーブルが表示され、Id列を除くデータが追加され、生成される新しいGUID(または選択したデータタイプ)が表示されます。 。