ナビゲーション プロパティを使用して関連エンティティにアクセスしようとしています。Lazy Loading をオフにして、関連するエンティティの Eager Load にInclude()
使用できるメソッドを使用しています。using System.Data.Entity
ただし、ビューが読み込まれると、関連するエンティティが null になります。
関係が適切に構成されていると思いますが、何が欠けていますか?
呼び出し方法
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");
}
}