LoginSignup
0
1

More than 3 years have passed since last update.

[3] : C#(ASP.NET core)でWeb APIを作って(以下略)[EntityFrameworkCore#INSERT/UPDATE編]

Last updated at Posted at 2020-12-23

概要

前回は、EntityFramework_Coreで「SELECT」してみました
今回は、「INSERT/UPDATE」を実装してみます

準備

前回の検証はこちら

今回のキモ

EntityFrameworkのアノテーションと、ModelBindingのアノテーションは「同時」に設定できる
以下、同時設定例

{
    [Table("m_memotype")] // ★EntityFrameworkの設定
    [System.Xml.Serialization.XmlRoot("memo")] // ※ ModelBinding[FromBodyにより自動でxml → オブジェクト化]
    public class MemoTypeEntity
    {
        [Key] // ★EntityFrameworkの設定
        [Column("mmsb")] // ★EntityFrameworkの設定
        [System.Xml.Serialization.XmlElement("mmsb")] // ※ ModelBinding[FromBodyにより自動でxml → オブジェクト化]
        public int Mmsb { get; set; }

        [Required] // ★EntityFrameworkの設定
        [Column("mmsn")] // ★EntityFrameworkの設定
        [System.Xml.Serialization.XmlElement("mmnm")] // ※ ModelBinding[FromBodyにより自動でxml → オブジェクト化]
        public string Mmsn { get; set; }
    }
}

以下のコードについて解説

1: // POST: api/MemoTypeEntities
2: [HttpPost]
3: public async Task<IActionResult> PostMemoTypeEntity([FromBody] MemoTypeEntity memoTypeEntity)
4: {
5:     if (!ModelState.IsValid)
6:     {
7:         return BadRequest(ModelState);
8:     }
9: 
10:     _context.MemoTypes.Add(memoTypeEntity);
11:     await _context.SaveChangesAsync();
12: 
13:     return CreatedAtAction("GetMemoTypeEntity", new { id = memoTypeEntity.Mmsb }, memoTypeEntity);
14: }

[5行目]ModelState.IsValidってなに?

⇒ バリデーションの実装[https://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_04/aspnetmvc3_04_02.html]

実装例 上記と組み合わせての使用もできると思われる
{
  public class Book
  {
    [Key]
    [DisplayName("ISBNコード")]
    [Required(ErrorMessage = "{0}は必須です。")]
    [RegularExpression("[0-9]{3}-[0-9]{1}-[0-9]{3,5}-[0-9]{3,5}-[0-9A-Z]{1}", ErrorMessage = "{0}はISBNの形式で入力してください。")]
    public string Isbn { get; set; }

    [DisplayName("書名")]
    [Required(ErrorMessage="{0}は必須です。")]
    [StringLength(100, ErrorMessage="{0}は{1}文字以内で入力してください。")]
    public string Title { get; set; }

    public virtual ICollection<Review> Reviews { get; set; }
  }
}

[11行目]await _context.SaveChangesAsync()ってなに?

⇒非同期保存[https://docs.microsoft.com/ja-jp/ef/core/saving/async]

上記でのcatchの仕方・例外処理

⇒EntityFramework SaveChange()時の例外発生時にSQLのエラーを表示させる[https://qiita.com/yahweh/items/1f1f1bf8b09c7d60cfbd]

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1