主/详细DataGridViews没有填充详细信息DataGridView

时间:2013-05-22 21:33:47

标签: winforms entity-framework dbcontext

我正在使用以下技术:WinForms,Entity Framework 4.4(.NET 4.0上的5.0),DBContext

我(我认为)是一个非常简单的主/详细信息表单,在我从EF 4.0升级到EF 4.4之前实际上工作得很好。现在,出于某种原因,Details DataGridView根本不会填充任何数据!

这是我自动生成的架构代码:

public partial class RoadMapping
{
    public RoadMapping()
    {
        this.RoadCharacteristics = new HashSet<RoadCharacteristic>();
    }

    public int RoadMappingID { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }

    public virtual ICollection<RoadCharacteristic> RoadCharacteristics { get; set; }
}

public partial class RoadCharacteristic
{
    public RoadCharacteristic()
    {
    }

    public int RoadCharacteristicID { get; set; }
    public int RoadMappingID { get; set; }
    public string Value { get; set; }
    public string Description { get; set; }

    public virtual RoadMapping RoadMapping { get; set; }
}

这是我使用EF 4.0的代码:

SATContext = new SafetyAssessmentToolEntities();

dataGridViewMappings.DataSource = bindingSourceMappings;
dataGridViewDetails.DataSource = bindingSourceDetails;

bindingSourceMappings.DataSource = SATContext.RoadMappings;
bindingSourceDetails.DataSource = bindingSourceMappings;
bindingSourceDetails.DataMember = "RoadCharacteristics";

以下是不适用于EF 4.4的代码:

SATContext = new SafetyAssessmentToolEntities();
SATContext.RoadMappings.Load();
SATContext.RoadCharacteristics.Load();

dataGridViewMappings.DataSource = bindingSourceMappings;
dataGridViewDetails.DataSource = bindingSourceDetails;

bindingSourceMappings.DataSource = SATContext.RoadMappings.Local.ToBindingList();
bindingSourceDetails.DataSource = bindingSourceMappings;
bindingSourceDetails.DataMember = "RoadCharacteristics";

请注意,表单设计者会声明bindingSourceMappingsbindingSourceDetails

我知道有很多更高级和代码密集的方法可以使这项工作,但我不明白为什么这种非常简单的方法不再适用。

有什么建议吗?


public partial class SafetyAssessmentToolEntities : DbContext
{
    public SafetyAssessmentToolEntities()
        : base("name=SafetyAssessmentToolEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<RoadCharacteristic> RoadCharacteristics { get; set; }
    public DbSet<RoadMapping> RoadMappings { get; set; }
}

0 个答案:

没有答案