2

私はEntity Frameworkについて学んでいますが、現在、データベースからデータを取得したり、行を更新したりするのに約10秒かかるという問題に直面しています。正常に行きました。

この遅延に加えて、コード自体は実際に期待どおりに機能します。

Google で検索すると、Entity Framework に関連するこの問題を抱えている他の人は見つかりませんでした。

私のCodeFirstMySQLEntitiesクラスコンストラクターと関係があるのではないかと思いますが、よくわかりません。

誰かが私にガイダンスを提供できれば幸いです。

これはメインコードです:

namespace CodeFirstMySQL
{
    class Program
    {
        static void Main(string[] args)
        {
            UserRepository userRepository = new UserRepository();

            userRepository.Update("Klein", "OtherName");

            //delay experienced here

            Console.WriteLine("done");
            Console.ReadLine();
        }
    }
}

これは DbContext コードです。

namespace CodeFirstMySQL.Database
{
    public class CodeFirstMySQLEntities : DbContext
    {
        public CodeFirstMySQLEntities() : base("CodeFirstMySQLEntities") { }

        public DbSet<UserModel> Users { get; set; }
    }
}

これは UserModel コードです。

namespace CodeFirstMySQL.Database.Models
{
    public class UserModel
    {
        [Key, StringLength(100)]
        public string firstName { get; set; }

        [StringLength(100)]
        public string lastName { get; set; }
    }
}

これはリポジトリ コードです。

namespace CodeFirstMySQL.Database.Repositories
{
    public class UserRepository
    {
        public void Insert(UserModel user)
        {
            using (var context = new CodeFirstMySQLEntities())
            {
                context.Users.Add(user);
                context.SaveChanges();
            }
        }

        public void Delete(string firstName)
        {
            using (var context = new CodeFirstMySQLEntities())
            {
                UserModel user = context.Users.FirstOrDefault(x => x.firstName == firstName);
                context.Users.Remove(user);
                context.SaveChanges();
            }
        }

        public void Update(string lastNameOld, string lastNameNew)
        {
            using (var context = new CodeFirstMySQLEntities())
            {
                UserModel user = context.Users.FirstOrDefault(x => x.lastName == lastNameOld);
                user.lastName = lastNameNew;
                context.SaveChanges();
            }
        }

        public IList<UserModel> GetUsers()
        {
            using (var context = new CodeFirstMySQLEntities())
            {
                return context.Set<UserModel>().ToList();
            }
        }
    }
}

接続文字列:

<connectionStrings>
    <add name="CodeFirstMySQLEntities" connectionString="Server=localhost; Database=CodeFirst; Uid=root; Pwd=" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
4

1 に答える 1

6

遅延は、ほぼ確実に Entity Framework の起動にかかる時間によるものです。これは、コードを終了する前に 2 回目の更新を試みることで確認できます。

次の抜粋は、何が起こっているかを説明しています

モデルのキャッシング

モデルの発見、データ注釈の処理、流暢な API 構成の適用には、いくらかのコストがかかります。派生 DbContext がインスタンス化されるたびにこのコストが発生するのを避けるために、最初の初期化中にモデルがキャッシュされます。キャッシュされたモデルは、同じ AppDomain で同じ派生コンテキストが構築されるたびに再利用されます。

于 2013-03-19T18:07:09.227 に答える