2

我正在学习实体框架,我目前面临一个问题,我需要大约 10 秒来从数据库中检索数据或更新一行,就好像我的代码实际上被卡了一段时间一样,即使调试它一切正常了。

除了这种延迟之外,代码本身实际上按预期工作。

在 Google 和此处搜索,我没有找到其他与实体框架相关的问题。

我认为这可能与我的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; }
    }
}

这是用户模型代码:

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

延迟几乎可以肯定是由于实体框架启动所需的时间。您可以通过在退出代码之前尝试第二次更新来确认这一点。

以下摘录解释了正在发生的事情

模型缓存

发现模型、处理数据注释和应用流畅的 API 配置需要一些成本。为了避免每次实例化派生的 DbContext 时产生此成本,模型在第一次初始化期间被缓存。然后,每次在同一个 AppDomain 中构造相同的派生上下文时,都会重新使用缓存的模型。

于 2013-03-19T18:07:09.227 回答