【完全ガイド】ADO.NET Entity Framework で ID 列をマスターする
ADO.NET Entity Framework は、.NET 開発者向けのオブジェクト関係マッパー (ORM) フレームワークです。エンティティと呼ばれるオブジェクトを使用して、データベースとのやり取りを抽象化します。エンティティは、データベースのテーブルと関連付けられ、ID 列などのプロパティを持つことができます。
ID 列は、テーブル内の各行を一意に識別するために使用される列です。多くの場合、自動的に生成される整数値です。Entity Framework では、Identity
属性を使用して ID 列を定義できます。
Entity Framework では、ID 列はエンティティの主キーとして使用されます。主キーは、エンティティを一意に識別するために使用される属性です。Entity Framework は、ID 列を使用してデータベースとの間のエンティティの挿入、更新、削除を行います。
ID 列の生成
Entity Framework は、ID 列の値を自動的に生成することができます。これを行うには、DatabaseGeneratedOption
列挙型の Identity
値を IdentityProperty
属性の GeneratedValue
プロパティに指定します。
例
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
[DbConfigurationType(typeof(MySqlConfiguration))]
public class MyContext : DbContext
{
public MyContext()
: base("MyDatabase")
{
}
public DbSet<MyEntity> MyEntities { get; set; }
}
この例では、MyEntity
エンティティには Id
という ID 列があります。この列は、Identity
属性を使用して定義されています。DatabaseGeneratedOption
列挙型の Identity
値を GeneratedValue
プロパティに指定することで、Entity Framework はこの列の値を自動的に生成します。
関連技術
- .NET
- SQL Server
- Entity Framework
補足
- 上記の例は、MySQL を使用していますが、他のデータベースプロバイダーでも同様に動作します。
- Entity Framework には、ID 列以外にもさまざまな属性があります。詳細は、ドキュメントを参照してください。
using (var context = new MyContext())
{
var entity = new MyEntity
{
Name = "My Entity"
};
context.MyEntities.Add(entity);
context.SaveChanges();
}
このコードを実行すると、MyEntities
テーブルに新しい行が挿入されます。新しい行の Id
列は、Entity Framework によって自動的に生成されます。
補足
- 上記のコードは、基本的な例です。実際のアプリケーションでは、より複雑な操作を行う必要がある場合があります。
ADO.NET Entity Framework で ID 列を扱うその他の方法
IDENTITY キーワードを使用する
SQL Server では、IDENTITY
キーワードを使用して、自動的に生成される ID 列を定義できます。Entity Framework は、このキーワードを認識し、ID 列の値を自動的に生成します。
public class MyEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
シード値を使用する
DatabaseGeneratedOption.Identity
オプションを使用する場合、Seed
プロパティと Increment
プロパティを使用して、ID 列のシード値と増分値を指定できます。
public class MyEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
[DbConfigurationType(typeof(MySqlConfiguration))]
public class MyContext : DbContext
{
public MyContext()
: base("MyDatabase")
{
}
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>()
.Property(p => p.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasSeed(1)
.HasIncrement(1);
}
}
public class MyEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
}
[DbConfigurationType(typeof(OracleConfiguration))]
public class MyContext : DbContext
{
public MyContext()
: base("MyDatabase")
{
}
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>()
.Property(p => p.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.HasSequence("MySequence");
}
}
ADO.NET Entity Framework には、ID 列を扱うさまざまな方法があります。使用する方法は、データベースの種類や要件によって異なります。
.net sql-server entity-framework