1

ナビゲーション プロパティを使用して関連エンティティにアクセスしようとしています。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");

}
 }
4

1 に答える 1

1

Database FirstCode First によって作成されたのと同じ POCO を使用してソリューションを作成した後、これを理解しましたReverse Engineer Power Tool

ナビゲーション プロパティ (関連エンティティ) がコンストラクターで新しく作成されたため、関連エンティティは null になっていました。これは、エンティティを上書きして null にしていました。

Reverse Engineer Power Toolでこれを行う必要がなかったので、コンストラクタで POCO を作成する理由はわかりませんDatabase Firstが、コンストラクタはまとめて削除できます。

かみそりビューがnullの関連エンティティでnull参照例外をスローしていたため、これを以前にキャッチできませんでした。

HTH 同じ問題を経験している他の人。

于 2012-04-25T16:46:44.853 に答える