【问题标题】:EF 4.3 Reverse Code First: Eager loaded related entities are nullEF 4.3 反向代码优先:急切加载的相关实体为空
【发布时间】:2012-04-25 14:47:45
【问题描述】:

我正在尝试使用导航属性访问一些相关实体。我已经关闭了延迟加载并使用Include() 可用的using System.Data.Entity 方法来渴望加载相关实体。但是,当视图加载时,我的相关实体为空。

我相信关系已正确配置我缺少什么?

调用方法

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

工作记录

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

工作记录地图

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

}
 }

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    好的,我在使用 Code First Reverse Engineer Power Tool 创建的相同 POCO 创建了 Database First 解决方案后发现了这一点。

    由于导航属性(相关实体)在构造函数中被新建,相关实体变为空;这是覆盖实体并使其为空。

    我不确定为什么 Reverse Engineer Power Tool 会使用构造函数创建 POCO,因为我不需要使用 Database First 执行此操作,但可以一起删除构造函数。

    我之前无法捕捉到这一点,因为 razor 视图在为空的相关实体上引发了空引用异常。

    其他遇到同样问题的人。

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2012-02-07
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多