Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 首先是实体框架代码,速度非常慢_Sql Server 2005_Entity Framework - Fatal编程技术网

Sql server 2005 首先是实体框架代码,速度非常慢

Sql server 2005 首先是实体框架代码,速度非常慢,sql-server-2005,entity-framework,Sql Server 2005,Entity Framework,通过大量的谷歌搜索,我似乎不是第一个遇到这个问题的人,但我一直找不到任何人能够令人满意地解决这个问题——我正在与一个遗留数据库集成,而我只是尝试与一个表集成(目前)然而,我对这个模型的第一个查询大约需要12秒左右的时间来执行。第二个电话几乎是即时的,正如预期的那样 以下是我的实体框架代码第一次设置的全部内容: public class PortalDatabase : DbContext { public DbSet<User> Users { get; set; }

通过大量的谷歌搜索,我似乎不是第一个遇到这个问题的人,但我一直找不到任何人能够令人满意地解决这个问题——我正在与一个遗留数据库集成,而我只是尝试与一个表集成(目前)然而,我对这个模型的第一个查询大约需要12秒左右的时间来执行。第二个电话几乎是即时的,正如预期的那样

以下是我的实体框架代码第一次设置的全部内容:

public class PortalDatabase : DbContext
{
    public DbSet<User> Users { get; set; }

    public PortalDatabase():base("portalDatabase")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        User.ConfigureEntity(modelBuilder.Entity<User>());
    }
}

public class User
{
    public int ID { get; set; }

    public string FullName { get; set; }

    /// <summary>
    /// Internal representation of the IsDisabled flag. This should not be
    /// written to; use <see cref="IsDisabled"/> instead.
    /// </summary>
    internal byte IsDisabledInternal { get; set; }

    public bool IsDisabled
    {
        get { return Convert.ToBoolean(this.IsDisabledInternal); }
        set { this.IsDisabledInternal = Convert.ToByte(value); }
    }

    public int LoginAttempts { get; set; }

    public string EmailAddress { get; set; }

    public string Password { get; set; }

    internal static void ConfigureEntity(EntityTypeConfiguration<User> entity)
    {
        entity.ToTable("Users");

        entity.Property(model => model.ID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("UserID");

        entity.Property(model => model.FullName)
            .HasColumnName("UserName");

        entity.Property(model => model.IsDisabledInternal)
            .HasColumnName("AccountLocked");

        entity.Ignore(model => model.IsDisabled);

        entity.Property(model => model.LoginAttempts)
            .HasColumnName("LoginAttempts");

        entity.Property(model => model.EmailAddress)
            .HasColumnName("EmailAddress");

        entity.Property(model => model.Password)
            .HasColumnName("Password");
    }
}
公共类PortalDatabase:DbContext { 公共数据库集用户{get;set;} 公共PortalDatabase():base(“PortalDatabase”) { } 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { User.ConfigureEntity(modelBuilder.Entity()); } } 公共类用户 { 公共int ID{get;set;} 公共字符串全名{get;set;} /// ///IsDisabled标志的内部表示形式。不应 ///写给;改为使用。 /// 内部字节IsDisabledInternal{get;set;} 公共场所被禁止 { 获取{return Convert.ToBoolean(this.IsDisabledInternal);} 设置{this.IsDisabledInternal=Convert.ToByte(value);} } public int loginatests{get;set;} 公共字符串电子邮件地址{get;set;} 公共字符串密码{get;set;} 内部静态void配置实体(EntityTypeConfiguration实体) { 实体。可转让(“用户”); Property(model=>model.ID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) .HasColumnName(“用户ID”); Property(model=>model.FullName) .HasColumnName(“用户名”); Property(model=>model.IsDisabledInternal) .HasColumnName(“账户锁定”); 忽略(model=>model.IsDisabled); entity.Property(model=>model.loginatests) .HasColumnName(“登录尝试”); entity.Property(model=>model.EmailAddress) .HasColumnName(“电子邮件地址”); entity.Property(model=>model.Password) .HasColumnName(“密码”); } } 此代码示例需要8-12秒执行:

    PortalDatabase database = new PortalDatabase();

    IEnumerable<User> users = from user in database.Users
                              where user.ID == 66
                              select user;
PortalDatabase database=newportaldatabase();
IEnumerable users=来自数据库中的用户。users
其中user.ID==66
选择用户;
我知道这个问题与元数据生成有关,它只生成一次,这“大大提高了性能”:

“代码优先”库使用与传统方法相同的底层EF,因此性能特征应该大致相同。“代码优先”库还包括aome smarts,以便缓存为映射到数据库或从数据库中检索到的元数据,从而只需计算一次(这大大提高了性能)

但我所描述的绩效是否平均?我无法想象实体框架团队会接受花12秒钟执行一个简单的查询。我误解他了吗?元数据缓存是否在(例如)IIS应用程序池的生存期内保持?这在某种程度上可能是可以接受的,尽管还很不理想

如果我不先使用代码,那么我就能够使用,据我所知,这将使我的应用程序大大加快。当首先使用代码开发模型时,是否有一个等价物


2012年2月14日更新:由于,我能够生成我的视图。不幸的是,这并没有改变创建新PortalDatabase实例的速度,这仍然需要相同的时间。我知道视图正在被使用,因为我在构造函数中放置了一个断点,但这不会影响任何事情。

要使用CodeFirst生成视图,请使用EF Power Tools。更多详情请参见此处:

非常感谢!我能够生成视图,但不幸的是,这没有影响任何东西。你有什么进一步的想法吗?你确定什么需要时间吗?这只是第一个查询还是所有查询都很慢?如果只是查询,那么它很可能是两件事中的一件——视图生成(对于小模型不应该发生)或创建数据库(如果不存在数据库)。您是否看到数据库存在时的缓慢性?另外,您是否尝试手动连接到数据库?快吗?如果所有查询都出现这种情况,您是否可以尝试使用Sql Profiler查看执行查询所需的时间?您是否也在使用更高级的映射,如层次结构或实体拆分?如果您的模型像上面那样简单,那么您不应该期望EF/CodeFirst会有太多性能下降。对于这种模型,我将研究network/db。好吧,我根本没有创建数据库,现在我正在连接本地机器上的一个SQL server实例。幸运的是,在对我的WCF服务发出第一个请求之后,它所做的任何事情都会被缓存,这样我就可以继续,而不用担心这会在生产中引起问题。我真的希望我的单元测试运行得更快。元数据缓存存在于AppDomain的生命周期中。元数据加载速度很慢,但对于这样一个简单的模型,12秒的加载速度确实很慢。我已经将您的模型复制到一个控制台应用程序中,创建了一个空数据库(由EF自动创建)。第一个查询耗时1秒,第二个查询立即返回。这12秒真奇怪。。。