2017-06-04 125 views
1

我尝试将我的Java EE项目重写为C#Rest Api项目。 对于数据库映射我用户实体框架,并从表中获取记录有一些问题。 首先,我有一个表至极被其他表简称:实体框架返回一个实体的每个引用表

CREATE TABLE Bibliogr (
    Bknumber INT PRIMARY KEY NOT NULL, 
    Authors VARCHAR(500), 
    Source VARCHAR(500), 
    Title VARCHAR(1000) 
); 

的映射类是以下内容:

public partial class Bibliogr 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Bibliogr() 
     { 
      this.AcOpTabl = new HashSet<AcOpTabl>(); 
      this.ConstSel = new HashSet<ConstSel>(); 
      this.CuryTabl = new HashSet<CuryTabl>(); 
      this.DecrTabl = new HashSet<DecrTabl>(); 
      this.DensTabl = new HashSet<DensTabl>(); 
      this.DielDiss = new HashSet<DielDiss>(); 
      this.Dielectr = new HashSet<Dielectr>(); 
      this.ElemTabl = new HashSet<ElemTabl>(); 
      this.ElOpTabl = new HashSet<ElOpTabl>(); 
      this.EquationTabl = new HashSet<EquationTabl>(); 
      this.EsOpTabl = new HashSet<EsOpTabl>(); 
      this.HardTabl = new HashSet<HardTabl>(); 
      this.HeatExpn = new HashSet<HeatExpn>(); 
      this.HeatTabl = new HashSet<HeatTabl>(); 
      this.MechTabl = new HashSet<MechTabl>(); 
      this.MnOpTabl = new HashSet<MnOpTabl>(); 
      this.ModfTabl = new HashSet<ModfTabl>(); 
      this.NlOpTabl = new HashSet<NlOpTabl>(); 
      this.PlavTabl = new HashSet<PlavTabl>(); 
      this.PzElTabl = new HashSet<PzElTabl>(); 
      this.RefrcInd = new HashSet<RefrcInd>(); 
      this.SuspTabl = new HashSet<SuspTabl>(); 
      this.Wavepure = new HashSet<Wavepure>(); 
     } 

     public int Bknumber { get; set; } 
     public string Authors { get; set; } 
     public string Source { get; set; } 
     public string Title { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<AcOpTabl> AcOpTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<ConstSel> ConstSel { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<CuryTabl> CuryTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<DecrTabl> DecrTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<DensTabl> DensTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<DielDiss> DielDiss { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Dielectr> Dielectr { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<ElemTabl> ElemTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<ElOpTabl> ElOpTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<EquationTabl> EquationTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<EsOpTabl> EsOpTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<HardTabl> HardTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<HeatExpn> HeatExpn { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<HeatTabl> HeatTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<MechTabl> MechTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<MnOpTabl> MnOpTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<ModfTabl> ModfTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<NlOpTabl> NlOpTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<PlavTabl> PlavTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<PzElTabl> PzElTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<RefrcInd> RefrcInd { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<SuspTabl> SuspTabl { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Wavepure> Wavepure { get; set; } 
    } 

有很多的HashSet的,我不希望从我的请求中获得。我怎样才能改变这种行为?我只需要这个表coulmn值,而不是其他表。

请求结果:

{ 
    "AcOpTabl":[ ], 
    "ConstSel":[ ], 
    "CuryTabl":[ ], 
    "DecrTabl":[ ], 
    "DensTabl":[ ], 
    "DielDiss":[ ], 
    "Dielectr":[ ], 
    "ElemTabl":[ ], 
    "ElOpTabl":[ ], 
    "EquationTabl":[ ], 
    "EsOpTabl":[ ], 
    "HardTabl":[ ], 
    "HeatExpn":[ ], 
    "HeatTabl":[ ], 
    "MechTabl":[ ], 
    "MnOpTabl":[ ], 
    "ModfTabl":[ ], 
    "NlOpTabl":[ ], 
    "PlavTabl":[ ], 
    "PzElTabl":[ ], 
    "RefrcInd":[ ], 
    "SuspTabl":[ ], 
    "Wavepure":[ ], 
    "Bknumber":4, 
    "Authors":"Niizeki N.,Yamada N.,Toyoda H.", 
    "Source":"Jap.J.Appl.Phys.,1967,v.6,N.3,p.318-327", 
    "Title":"Growth ridges, etched hillocks and crystal structure of lithium niobate" 
} 

回答

1

我假设你有你的EntityFramework的启用的DbContext延迟加载。当序列化发生时,每个属性都被访问并且EF会为你加载它。

这种情况的好解决方案是删除ICollection属性中的virtual关键字。这是选择性禁用延迟加载。

您还可以通过这样

public class YourContext : DbContext 
{ 
    public YourContext() 
    { 
     // Default behaviour is true 
     this.Configuration.LazyLoadingEnabled = false; 
    } 
} 
禁用延迟加载所有在一起