0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Entity Frameworkを使ってみた

Last updated at Posted at 2024-11-19

はじめに

Entity Framework(EF)を使ってデータベース操作を行う方法について紹介します。今回は、ユーザー情報を管理する簡単なサービスをSampleとして作成しました。

コードの概要

以下に、ユーザー情報を管理するためのサービスクラスUserInfoServiceのコードを示します。

モデルクラス

まず、ユーザー情報を表すモデルクラスを定義します。

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace UserCreator.Models
{
    [Table("UserInfo")]
    public class UserInfo
    {
        [Key]
        public string UserId { get; set; }
        public string Status { get; set; }
        public DateTime CreatedDate { get; set; }
        public DateTime UpdatedDate { get; set; }
    }
}

DbContextクラス

次に、DbContextクラスを定義します。

using System.Data.Entity;

namespace UserCreator.Models
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext() : base("DBConnectionString")
        {
            Database.SetInitializer(null); // Disable automatic migration
        }

        public DbSet<UserInfo> UserInfos { get; set; }
    }
}

サービスクラス

最後に、ユーザー情報を管理するサービスクラスを定義します。

using System;
using System.Data.SqlClient;
using System.Linq;

namespace UserCreator.Models
{
    public class UserInfoService
    {
        private readonly ApplicationDbContext _context;

        public UserInfoService(ApplicationDbContext context)
        {
            _context = context;
        }

        public void UpdateUserInfoByFile(SampleUserCode sampleUserCode)
        {
            var user = _context.UserInfos.SingleOrDefault(u => u.UserId == sampleUserCode.UserId);
            if (user != null)
            {
                user.Status = "Active";
                user.UpdatedDate = DateTime.Now;
                _context.SaveChanges();
            }
        }

        public void InsertUserInfoByFile(SampleUserCode sampleUserCode)
        {
            var newUser = new UserInfo
            {
                UserId = sampleUserCode.UserId,
                Status = "Inactive",
                CreatedDate = DateTime.Now,
                UpdatedDate = DateTime.Now
            };
            _context.UserInfos.Add(newUser);
            _context.SaveChanges();
        }

        public UserInfo GetUserInfoWithNoLock(string userId)
        {
            var query = "SELECT TOP 1 * FROM [UserInfo] WITH(NOLOCK) WHERE UserId = @UserId";
            var userIdParam = new SqlParameter("@UserId", userId);

            return _context.UserInfos
                           .SqlQuery(query, userIdParam)
                           .SingleOrDefault();
        }
    }
}

ポイント

WITH(NOLOCK)を使用する場合、生のSQLを書く必要があります。Entity FrameworkのLINQクエリではWITH(NOLOCK)を直接指定することができないため、SQLクエリを直接記述して実行する必要があります。

まとめ

Entity Frameworkを使用することで、データベース操作が簡単に行えるようになります。今回の例では、ユーザー情報の挿入、更新、および取得を行う方法を紹介しました。この記事が参考になれば幸いです。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?