2017-11-26 6 views
0

를 작동하지 여기 엔티티 프레임 워크 : 게으른 Laoding 나는 심지어 간단한 채워 모든 관련 테이블 (여러 번// 원형 루프)를 얻고

내 DB 정보입니다 ..이 개 테이블 쿼리의 등이 있습니다.

public interface IPhaniDbContext 
{ 
     DbSet<Data_CustomerDetail> CustomerDetails { get; set; } 
     DbSet<Data_DisplayStyle> DisplayStyles { get; set; } 
     DbSet<Data_ResumeDetail> ResumeDetails { get; set; } 

     int Save(); 
     Task<int> SaveChangesAsync(); 

     Database Database { get; } 

     DbEntityEntry Entity(object entity); 

     DbSet<TEntity> Set<TEntity>() where TEntity : class; 
} 

public class PhaniDbContext :DbContext , IPhaniDbContext 
{ 
     public PhaniDbContext() : base(ConnectionString()) 
     { 
      Configuration.LazyLoadingEnabled = false; 
     } 

     private static string ConnectionString() 
     { 
      return ConfigurationManager.AppSettings[Constants.Appsetting_PhaniDbConnectionString]; 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.AddFromAssembly(Assembly.GetAssembly(GetType())); 

      modelBuilder.Entity<Data_CustomerDetail>() 
       .HasMany(x => x.ResumeDetails).WithRequired(e => e.CustomerDetail).WillCascadeOnDelete(false); 

      //modelBuilder.Entity<Data_CustomerDetail>() 
      // .Map(x => x.Requires("ResumeDetails")).Ignore(e => e.ResumeDetails) 
      // .Map(x => x.Requires("DisplayStyle")).Ignore(e => e.ResumeDetails); 

      modelBuilder.Entity<Data_DisplayStyle>() 
       .HasMany(x => x.ResumeDetails).WithRequired(e => e.DisplayStyle).WillCascadeOnDelete(false); 

     } 

     public int Save() 
     { 
      return base.SaveChanges(); 
     } 

     public DbEntityEntry Entity(object entity) 
     { 
      throw new NotImplementedException(); 
     } 

     //TODO: No-Urget-Over ride Save just to know. and all other possible overrides. 
     public virtual DbSet<Data_CustomerDetail> CustomerDetails { get; set; } 
     public virtual DbSet<Data_DisplayStyle> DisplayStyles { get; set; } 
     public virtual DbSet<Data_ResumeDetail> ResumeDetails { get; set; } 
} 

검색어 :

[Table("CustomerDetails")] 
public class Data_CustomerDetail 
{ 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Data_CustomerDetail() 
     { 
      ResumeDetails = new HashSet<Data_ResumeDetail>(); 
     } 

     [Key] 
     public int CustomerDetailsID { get; set; } 

     [StringLength(500)] 
     public string FirstName { get; set; } 

     [StringLength(500)] 
     public string LastName { get; set; } 

     [StringLength(50)] 
     public string phoneNumber { get; set; } 

     [StringLength(50)] 
     public string Zipcode { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Data_ResumeDetail> ResumeDetails { get; set; } 
} 

public class Data_DisplayStyle 
{ 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Data_DisplayStyle() 
     { 
      ResumeDetails = new HashSet<Data_ResumeDetail>(); 
     } 

     public int DisplayStyleID { get; set; } 

     [StringLength(500)] 
     public string Name { get; set; } 

     [StringLength(500)] 
     public string Description { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Data_ResumeDetail> ResumeDetails { get; set; } 
} 

[Table("ResumeDetails")] 
public class Data_ResumeDetail 
{ 
     [Key] 
     public int ResumeDetailsId { get; set; } 

     [Column("CAREER OBJECTIVE")] 
     [StringLength(4000)] 
     public string CAREER_OBJECTIVE { get; set; } 

     [Column("HONORS AND REWARDS")] 
     [StringLength(4000)] 
     public string HONORS_AND_REWARDS { get; set; } 

     [Column("PROFESSIONAL RESPONSIBILITIES")] 
     [StringLength(4000)] 
     public string PROFESSIONAL_RESPONSIBILITIES { get; set; } 

     [Column("RELATED EXPERIENCE")] 
     [StringLength(4000)] 
     public string RELATED_EXPERIENCE { get; set; } 

     public int? CustomerDetailsID { get; set; } 

     public int? DisplayStyleId { get; set; } 

     public virtual Data_CustomerDetail CustomerDetail { get; set; } 

     public virtual Data_DisplayStyle DisplayStyle { get; set; } 
} 

누군가가이 문제를 해결 좀 도와 주 시겠어요 ...

난 그냥 원하는 CustomerDetails 및 ResumeDetails과 :

_phaniDbContext.CustomerDetails 
       .Include(x => x.ResumeDetails) 
       .Include(x=>x.ResumeDetails.Select(y=>y.DisplayStyle)) 
       .First(x=>x.CustomerDetailsID == customerId); 

내 포항 강판은 여기에 있습니다 한 번 표시 스타일 테이블 ... 여러 번 ..

이내 물체의 무게 증가하고있다

+0

작동하지 않지만'Configuration.LazyLoadingEnabled = false;'를 추가했습니다. –

+0

답장을 보내 주셔서 감사합니다. 심지어 Configuration.LazyLoadingEnabled = 같은 방식으로 로딩되는 참. –

+0

EF에게 필요한 엔티티를 연결하는 방법을 알려주기 위해'.HasForeignKey (...) '또는'ForeignKey' 속성을 사용하지 않았습니다. 참고 자료 : https://stackoverflow.com/questions/19920412/specifying-hasforeignkey-with-modelbuilder – Eris

답변

0
외래 키 관계를 수행 할 때, 당신은 아마 외래 키 (들)을 지정해야합니다

예 : 게으른 로딩이 왜 당신이 궁금해하는

modelBuilder 
    .Entity<Data_CustomerDetail>() 
    .HasMany(x => x.ResumeDetails) 
    .WithRequired(e => e.CustomerDetail) 
    .HasForeignKey(e => e.CustomerDetailsID) 
    .WillCascadeOnDelete(false); 

modelBuilder 
    .Entity<Data_DisplayStyle>() 
    .HasMany(x => x.ResumeDetails) 
    .WithRequired(e => e.DisplayStyle) 
    .HasForeignKey(e => e.DisplayStyleId) 
    .WillCascadeOnDelete(false); 
+0

답장을 보내 주셔서 감사합니다. foriegn 키로도 엄청난 데이터를 얻고 있습니다. 내 코드는 git hub https://github.com/pavankumar0425/PhaniResumeAPi에 있습니다. 문제를 확인하는 데 도움이되기를 바랍니다. –