簡體   English   中英

實體框架CodeFirst遇到延遲

[英]Entity Framework CodeFirst delay experienced

我正在學習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>

延遲幾乎可以肯定是由於實體框架啟動所需的時間。 您可以在退出代碼之前嘗試第二次更新來確認這一點。

以下摘錄解釋了發生了什么

模型緩存

發現模型,處理數據注釋和應用流利的API配置涉及一些成本。 為了避免在每次實例化派生的DbContext時產生此成本,模型將在第一次初始化期間進行緩存。 每次在相同的AppDomain中構造相同的派生上下文時,都會重新使用緩存的模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM