データモデルの追加とデータ操作
データモデルを作成
データ接続用DbContextも同時に作成する。
GoodsModels.cs
public class Goods { [Key] [Display(Name="商品ID")] public virtual string Id { get; set; } [Required] [Display(Name = "商品CD")] public string Code { get; set; } [Required] [Display(Name = "商品名")] public string Name { get; set; } [Required] [Display(Name = "状態")] public string Status { get; set; } [Display(Name = "登録日")] [DataType(DataType.DateTime)] public DateTime? CreateDate { get; set; } [Display(Name = "登録者")] public string CreateUserId { get; set; } [Display(Name = "修正日")] [DataType(DataType.DateTime)] public DateTime? ModifyDate { get; set; } [Display(Name = "修正者")] public string ModifyUserId { get; set; } } public class GoodsDbContext : DbContext { public GoodsDbContext() : base("DefaultConnection") { } public System.Data.Entity.DbSet<ProjectNameSpace.Models.Goods> Goods { get; set; } }
add-migrationでテーブルを作成
XXXXXX_AddGoods.cs
public partial class AddGoods : DbMigration { public override void Up() { CreateTable( "dbo.Goods", c => new { Id = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"), Code = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"), Name = c.String(nullable: false, maxLength: 255, storeType: "nvarchar"), ImagePath = c.String(nullable: true, maxLength: 255, storeType: "nvarchar"), Status = c.Int(nullable: false), CreateDate = c.DateTime(precision: 0), CreateUserId = c.String(nullable: true, maxLength: 128, storeType: "nvarchar"), ModifyDate = c.DateTime(precision: 0), ModifyUserId = c.String(nullable: true, maxLength: 128, storeType: "nvarchar"), }) .PrimaryKey(t => t.Id) .Index(t => new { t.GoodsCd, t.GoodsSubCd }, unique: true, name: "GoodsCdSubCdIndex"); } public override void Down() { DropIndex("dbo.Goods", "GoodsCdSubCdIndex"); DropTable("dbo.Goods"); } } }
update-database
データベースに適用する。
PM> update-database ターゲット データベースに適用されている SQL ステートメントを表示するには、'-Verbose' フラグを指定します。 明示的な移行を適用しています: [201508190929008_AddGoods]。 明示的な移行を適用しています: 201508190929008_AddGoods。 Seed メソッドを実行しています。
GoodsControllerでの使用例
GoodsController.cs
public class GoodsController : Controller { private GoodsDbContext db = new GoodsDbContext(); // 一覧表示 public ActionResult Index() { return View(db.Goods.ToList()); } // GET: Goods/Details/5 public ActionResult Details(string id) { Goods good = db.Goods.Find(id); return View(good); } // POST: Goods/Create [HttpPost] public ActionResult Create(Goods pGood) { //新規ID設定 pGood.Id = Guid.NewGuid().ToString(); db.Entry(pGood).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); } return RedirectToAction("Index"); } // POST: Goods/Edit/5 [HttpPost] public ActionResult Edit([Bind(Include = "Id,Name,ImagePath,Status")]Goods pGood) { //DBに保存 db.Entry(pGood).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } // POST: Goods/Delete/5 [HttpPost] public ActionResult Delete(Goods pGood) { db.Entry(pGood).State = System.Data.Entity.EntityState.Deleted; db.SaveChanges(); return RedirectToAction("Index"); } }
- 新しいキーIDを生成:Guid.NewGuid()
- 対象データを検索:db.Goods.Find(id)
- 新規追加:db.Entry(goods).State = EntityState.Added
- 修正:db.Entry(goods).State = EntityState.Modified
- 変更更新:db.SaveChanges();