2012-04-25 88 views
1

我试图访问一些使用导航属性的相关实体。我已关闭延迟加载,并正在使用Include()方法可用using System.Data.Entity加载相关实体。但是,当视图加载时,我的相关实体为null。EF 4.3反向代码优先:渴望加载的相关实体为空

我相信关系已正确配置我错过了什么?

调用方法

public IQueryable<JobRecord> GetAll() 
{ 
    return _dataContext.Set<JobRecord>() 
     .Include(t => t.CompanyInfo); 
} 

语境

public class Application_Context : DbContext, IDataContext 
{ 
public Gyroview_Context():base("Application_Entities") 
{ 
    Database.SetInitializer<Application_Context>(null); 
    Configuration.LazyLoadingEnabled = false; 
} 

    public DbSet<CompanyInfo> CompanyInfoes { get; set; } 
public DbSet<JobRecord> JobRecords { get; set; } 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new CompanyInfoMap()); 
      modelBuilder.Configurations.Add(new JobRecordMap()); 

    modelBuilder.Entity<JobRecord>() 
      .HasOptional(r => r.CompanyInfo) 
      .WithMany(c => c.JobRecords) 
      .HasForeignKey(r => r.CompanyID); 
} 

public IDbSet<TEntity> Set<TEntity>() where TEntity : class 
{ 
    return base.Set<TEntity>(); 
} 
} 

JobRecord

public class JobRecord 
{ 
public JobRecord() 
{ 
     this.CompanyInfo = new CompanyInfo(); 
} 

    public Nullable<int> CompanyID { get; set; } 
public int Jobid { get; set; } 

public virtual CompanyInfo CompanyInfo { get; set; } 
} 

JobRecord地图

public class JobRecordMap : EntityTypeConfiguration<JobRecord> 
{ 
    public JobRecordMap() 
    { 
    // Primary Key 
    this.HasKey(t => t.Jobid); 

    // Table & Column Mappings 
    this.ToTable("JobRecord"); 
    this.Property(t => t.CompanyID).HasColumnName("CompanyID"); 
    this.Property(t => t.Jobid).HasColumnName("Jobid"); 

    // Relationships  

     this.HasOptional(t => t.CompanyInfo) 
    .WithMany(t => t.JobRecords) 
      .HasForeignKey(d => d.CompanyID); 
} 
} 

公司信息

public class CompanyInfo 
{ 
    public CompanyInfo() 
    { 
     this.JobRecords = new List<JobRecord>();  
    } 

    public int CompanyID { get; set; } 
    public string CompanyName { get; set; } 
    public string Address { get; set; } 

    public virtual ICollection<JobRecord> JobRecords { get; set; } 
} 

公司信息地图

public class CompanyInfoMap : EntityTypeConfiguration<RigViewCompanyInfo> 
{ 
    public CompanyInfoMap() 
    { 
    // Primary Key 
    this.HasKey(t => t.CompanyID); 

    // Properties 
    this.Property(t => t.CompanyName) 
    .HasMaxLength(255); 

    this.Property(t => t.Address) 
    .HasMaxLength(255); 


    // Table & Column Mappings 
    this.Property(t => t.CompanyID).HasColumnName("CompanyID"); 
    this.ToTable("CompanyInfo"); 
    this.Property(t => t.CompanyName).HasColumnName("CompanyName"); 
    this.Property(t => t.Address).HasColumnName("Address"); 

} 
} 

回答

1

好,我想通这一个使用创建的同一波苏斯创建Database First解决方案后,代码冷杉st Reverse Engineer Power Tool

由于导航属性(相关实体)在构造函数中被刷新,相关实体将出现空值;这覆盖了实体并使其为空。

我不知道为什么Reverse Engineer Power Tool与构造函数创建POCO,因为我已经没有必要与Database First要做到这一点,但构造函数可以被一起删除。

我之前无法捕捉到这个,因为剃须刀视图在空的相关实体上抛出一个空引用异常。

HTH其他人遇到同样的问题。