2017-11-26 6 views
0

を動作していない私のDBの詳細です。Entity Frameworkの:レイジーLaodingは、私はここ..単純な2つのテーブルのクエリを含んでものために(複数回/円形/ループ)関連するすべてのテーブルが読み込ま</p> <p>を取得しています

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); 

私POCOSはここにあります一回...表示スタイルテーブル...複数回ではありません..

このは私のオブジェクトの重量増加している

+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にあります。問題の特定に役立つことを願っています。 –