none
c# EF Code First RRS feed

  • Вопрос

  • Добрый день. Я создал проект и модель данных Code First, использую EF 5.0 у меня в модели содержится примерно 45 классов связанных между собой. В результате доступ к данным происходит очень медленно как чтение так и запись, порой до 15 минут. Подскажите пожалуйста в чем может быть дело и что я делаю не так.
    30 июля 2013 г. 19:34

Ответы

Все ответы

  • Так сходу сказать трудно. Используйте SQL Server Profiler, он покажет всё, что идёт к СУБД. Там уже примерно будет видно что конкретно работает медленно и тормозит.

    Сделаем содержимое сообщества лучше, вместе!

    31 июля 2013 г. 5:42
    Модератор
  • В SQL Server Profiler пусто, ничего кроме соединения с бд и создания самой структуры бд.
    31 июля 2013 г. 6:07
  • Вам нужно подключиться к к той СУБД, где у вас развёрнута база. Какой тип и версию СУБД вы используете?

    Сделаем содержимое сообщества лучше, вместе!

    31 июля 2013 г. 6:14
    Модератор
  • MS SQL Server 2012, самое интресное что в сид методе у меня добавляются в бд начальные данные, запустил приложение на ночь и за ноч так ничего и не добавилось в СУБД, если половину классов удаляю тогда приложение работает но очень медленно. Очень медленное первое обращение к dbcontext следующие обращения уже происходят в разы быстрее, после перезапуска снова все очень медленно. 
    31 июля 2013 г. 6:23
  • Много ли у вас данных? Но, думаю, скорее всего проблема у вас в коде, а не размере данных. А так конкретно, сказать что либо трудно. Попробуйте начать с профилирования кода, измерив время выполнения методов. Одновременно следите за запросами в профайлере. Можете добавлять классы сужностей постепенно, пересоздавая базу. И смотреть, после каких именнно происходит замедление.

    Сделаем содержимое сообщества лучше, вместе!

    31 июля 2013 г. 7:45
    Модератор
  • Нет данных не много, в некоторых таблицах (там их больше всего) по 100 записей. Так как Вы описали выше я пробовал, после каждого добавленного класса работа приложения замедляется.
    31 июля 2013 г. 7:54
  • 100 записей это почти ничто. Если можете показать код, то попытаемся помочь. Так, сказать что либо трудно.

    Сделаем содержимое сообщества лучше, вместе!

    31 июля 2013 г. 7:58
    Модератор
  • Вот код DbContext

    public class UsDbContext : DbContext
        {
            public DbSet<User> Users { get; set; }
            public DbSet<Mail> Mails { get; set; }
            public DbSet<Country> Countries { get; set; }
            public DbSet<State> States { get; set; }
            public DbSet<City> Cities { get; set; }
            public DbSet<BodyArt> BodyArts { get; set; }
            public DbSet<BodyType> BodyTypes { get; set; }
            public DbSet<Complexion> Complexions { get; set; }
            public DbSet<DoYouDrink> DoYouDrinks { get; set; }
            public DbSet<DoYouHaveChildren> DoYouHaveChildrens { get; set; }
            public DbSet<DoYouHavePets> DoYouHavePetses { get; set; }
            public DbSet<DoYouPracticeSafeSex> DoYouPracticeSafeSexs { get; set; }
            public DbSet<DoYouSmoke> DoYouSmokes { get; set; }
            public DbSet<DoYouWantChildren> DoYouWantChildrens { get; set; }
            public DbSet<Education> Educations { get; set; }
            public DbSet<Occupation> Occupations { get; set; }
    
            public DbSet<EmploymentStatus> EmploymentStatus { get; set; }
            public DbSet<EnglishLanguageAbility> EnglishLanguageAbility { get; set; }
            public DbSet<EyeColor> EyeColor { get; set; }
            public DbSet<EyeWear> EyeWear { get; set; }
            public DbSet<FacialHair> FacialHair { get; set; }
            public DbSet<HairColor> HairColor { get; set; }
            public DbSet<HairLength> HairLength { get; set; }
            public DbSet<HairType> HairType { get; set; }
            
            public DbSet<Height> Height { get; set; }
            public DbSet<HomeType> HomeType { get; set; }
            public DbSet<IConsiderMyAppearanceAs> ConsiderMyAppearanceAs { get; set; }
            public DbSet<Income> Income { get; set; }
            public DbSet<LanguagesSpoken> LanguagesSpoken { get; set; }
            public DbSet<LivingSituation> LivingSituation { get; set; }
            public DbSet<MaritalStatus> MaritalStatus { get; set; }
            public DbSet<MyBestFeature> MyBestFeature { get; set; }
            public DbSet<Nationality> Nationality { get; set; }
            public DbSet<NumberOfChildren> NumberOfChildren { get; set; }
            public DbSet<OldestChild> OldestChild { get; set; }
            public DbSet<Polygamy> Polygamy { get; set; }
            public DbSet<RelationshipLookingFor> RelationshipLookingFor { get; set; }
            public DbSet<Religion> Religion { get; set; }
            public DbSet<ReligiousValues> ReligiousValues { get; set; }
            public DbSet<StarSign> StarSign { get; set; }
            public DbSet<Tribe> Tribe { get; set; }
            public DbSet<Weight> Weight { get; set; }
            public DbSet<WillingToRelocate> WillingToRelocate { get; set; }
            
            public DbSet<YoungestChild> YoungestChild { get; set; }
            public DbSet<YourEthnicityIsMostly> YourEthnicityIsMostly { get; set; }

    И примеры кода сущностей

    public class User
    {
        [Key]
        public Guid Id { get; set; }
    
        [Column(TypeName = "varchar")]
        public string Name { get; set; }
        [Column(TypeName = "varchar")]
        public string Password { get; set; }
        public bool IsActive { get; set; }
        public bool IsDeleted { get; set; }
        [Column(TypeName="varchar")]
        public string Email { get; set; }
        public DateTime? LastVisit { get; set; }
        [Column(TypeName = "varchar")]
        public string ResponseCode { get; set; }
        public virtual RoleNames Role { get; set; }
        public virtual ICollection<Mail> Mail { get; set; }
        public virtual ICollection<DoYouHavePets> Pets { get; set; }
        public virtual Country Country { get; set; }
        public virtual State State { get; set; }
        public virtual City City { get; set; }
        public virtual BodyArt BodyArt { get; set; }
        public virtual BodyType BodyType { get; set; }
        public virtual Complexion Complexion { get; set; }
        public virtual DoYouDrink DoYouDrink { get; set; }
        public virtual DoYouHaveChildren DoYouHaveChildren { get; set; }
        public virtual DoYouHavePets DoYouHavePets { get; set; }
        public virtual DoYouPracticeSafeSex DoYouPracticeSafeSex { get; set; }
        public virtual DoYouSmoke DoYouSmoke { get; set; }
        public virtual DoYouWantChildren DoYouWantChildren { get; set; }
        public virtual Education Education { get; set; }
        public virtual Occupation Occupation { get; set; }
        public virtual EmploymentStatus EmploymentStatus { get; set; }
        public virtual EnglishLanguageAbility EnglishLanguageAbility { get; set; }
        public virtual EyeColor EyeColor { get; set; }
        public virtual EyeWear EyeWear { get; set; }
        public virtual FacialHair FacialHair { get; set; }
        public virtual HairColor HairColor { get; set; }
        public virtual HairLength HairLength { get; set; }
        public virtual HairType HairType { get; set; }
        public virtual Height Height { get; set; }
        public virtual HomeType HomeType { get; set; }
        public virtual IConsiderMyAppearanceAs ConsiderMyAppearanceAs { get; set; }
        public virtual Income Income { get; set; }
        public virtual LanguagesSpoken LanguagesSpoken { get; set; }
        public virtual LivingSituation LivingSituation { get; set; }
        public virtual MaritalStatus MaritalStatus { get; set; }
        public virtual MyBestFeature MyBestFeature { get; set; }
        public virtual Nationality Nationality { get; set; }
        public virtual NumberOfChildren NumberOfChildren { get; set; }
        public virtual OldestChild OldestChild { get; set; }
        public virtual Polygamy Polygamy { get; set; }
        public virtual RelationshipLookingFor RelationshipLookingFor { get; set; }
        public virtual Religion Religion { get; set; }
        public virtual ReligiousValues ReligiousValues { get; set; }
        public virtual StarSign StarSign { get; set; }
        public virtual Tribe Tribe { get; set; }
        public virtual Weight Weight { get; set; }
        public virtual WillingToRelocate WillingToRelocate { get; set; }
        public virtual YoungestChild YoungestChild { get; set; }
        public virtual YourEthnicityIsMostly YourEthnicityIsMostly { get; set; }
    }

    И сущность мейл

    public class Mail
    {
        public int Id { get; set; }
        public Guid FromUser { get; set; }
        public string Title { get; set; }
        public string Message { get; set; }
        public DateTime Date { get; set; }
    
        public virtual User User { get; set; }
    }

    31 июля 2013 г. 8:02
  • Хорошо. Как будет свободное время попробую воспроизвести у себя.

    Сделаем содержимое сообщества лучше, вместе!

    31 июля 2013 г. 8:05
    Модератор
  • При добавлении связий сущностей падает скорость, вот пример контекста с временем запуска консольконо приложения:

    public class User
    {
        [Key]
        public Guid Id { get; set; }
    
        [Index("UserName", unique: false)]
        [MaxLength(255)]
        [Column(TypeName = "varchar")]
        public string Name { get; set; }
        [Column(TypeName = "varchar")]
        public string Password { get; set; }
    
        [Index("IsActive", unique: false)]
        public bool IsActive { get; set; }
    
        [Index("IsDeleted", unique: false)]
        public bool IsDeleted { get; set; }
    
        [Index("Email", unique: true)]
        [MaxLength(255)]
        [Column(TypeName="varchar")]
        public string Email { get; set; }
        public DateTime? LastVisit { get; set; }
        [Column(TypeName = "varchar")]
        public string ResponseCode { get; set; }
        
        public virtual RoleNames Role { get; set; }
        
        public virtual ICollection<Mail> Mail { get; set; }
        public virtual ICollection<DoYouHavePets> Pets { get; set; }
        public virtual Country Country { get; set; }
        public virtual State State { get; set; }
        public virtual City City { get; set; }
        public virtual BodyArt BodyArt { get; set; }
        public virtual BodyType BodyType { get; set; }
        public virtual Complexion Complexion { get; set; }
        public virtual DoYouDrink DoYouDrink { get; set; }
        public virtual DoYouHaveChildren DoYouHaveChildren { get; set; }
        public virtual DoYouHavePets DoYouHavePets { get; set; }
        public virtual DoYouPracticeSafeSex DoYouPracticeSafeSex { get; set; }
        public virtual DoYouSmoke DoYouSmoke { get; set; }
        public virtual DoYouWantChildren DoYouWantChildren { get; set; }
        public virtual Education Education { get; set; }
        public virtual Occupation Occupation { get; set; }
        
        public virtual EmploymentStatus EmploymentStatus { get; set; }
        public virtual EnglishLanguageAbility EnglishLanguageAbility { get; set; }
        public virtual EyeColor EyeColor { get; set; }
        public virtual EyeWear EyeWear { get; set; }
        public virtual FacialHair FacialHair { get; set; }
        public virtual HairColor HairColor { get; set; }                                        //4 secs
        public virtual HairLength HairLength { get; set; }                                      //5 secs
        public virtual HairType HairType { get; set; }                                          //7 secs
        public virtual Height Height { get; set; }                                              //13 secs
        public virtual HomeType HomeType { get; set; }                                          //24 secs
        public virtual IConsiderMyAppearanceAs ConsiderMyAppearanceAs { get; set; }             //45 secs
        
        public virtual Income Income { get; set; }                                              //
        /*public virtual LanguagesSpoken LanguagesSpoken { get; set; }
        public virtual LivingSituation LivingSituation { get; set; }
        public virtual MaritalStatus MaritalStatus { get; set; }
        public virtual MyBestFeature MyBestFeature { get; set; }
        public virtual Nationality Nationality { get; set; }
        public virtual NumberOfChildren NumberOfChildren { get; set; }
        public virtual OldestChild OldestChild { get; set; }
        public virtual Polygamy Polygamy { get; set; }
        public virtual RelationshipLookingFor RelationshipLookingFor { get; set; }
        public virtual Religion Religion { get; set; }
        public virtual ReligiousValues ReligiousValues { get; set; }
        public virtual StarSign StarSign { get; set; }
        public virtual Tribe Tribe { get; set; }
        public virtual Weight Weight { get; set; }
        public virtual WillingToRelocate WillingToRelocate { get; set; }
        public virtual YoungestChild YoungestChild { get; set; }
        public virtual YourEthnicityIsMostly YourEthnicityIsMostly { get; set; }
         * */
    }

    31 июля 2013 г. 10:01
  • То есть при добавлении 23 связи сущностей приложение стартует за 4 секунды 24 связи - 5 секунд, 25 связи 7 секунд, дальше при каждом добавлении скорость инициализации контекста падает ровно в два раза. 
    31 июля 2013 г. 10:06
  • Разобрался, нужно генерировать model view, вот тут описанно как именно http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power-tools-ctp1-released.aspx

    Тему можно закрывать.

    • Изменено Yaroslav Gulko 31 июля 2013 г. 10:17
    • Помечено в качестве ответа YatajgaModerator 1 августа 2013 г. 5:16
    31 июля 2013 г. 10:17
  • Спасибо, что не забыли и выложили решение. Оно пригодится другим в будущем.

    Сделаем содержимое сообщества лучше, вместе!

    1 августа 2013 г. 5:17
    Модератор