概要
前回は、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]