ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

データモデルの追加とデータ操作

データモデルを作成

データ接続用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");
        }
}
  1. 新しいキーIDを生成:Guid.NewGuid()
  2. 対象データを検索:db.Goods.Find(id)
  3. 新規追加:db.Entry(goods).State = EntityState.Added
  4. 修正:db.Entry(goods).State = EntityState.Modified
  5. 変更更新:db.SaveChanges();