实体框架6 - 0.1关系映射

本文关键字:关系 映射 框架 实体 | 更新日期: 2023-09-27 17:51:19

我有两个类:

public class Report
{
    public int IdReport {get;set;}
    public int IdModel {get;set;}
    public Model MyModel {get;set;}
}
public class Model
{
    public int IdModel {get;set;}
    public Report MyReport {get;set}
}

我有这样的配置类:

public class ReportConfiguration : EntityTypeConfiguration<Report>
{
     HasOptional(c => c.Model).WithOptionalPrincipal(d => d.Report)....
}

这就是我卡住的地方,如何获得HasForeignKey(c => c. idmodel)配置

我需要这个,因为我们有一个使用绑定源的表单,报表可以有或没有模型(因为我们制作动态报表)。

我不想创建一个假的外键,就像创建一个属性和报告插入,我设置这个属性值与主键从模型。这是我发现用正确的值来填充bindingsource的一种方法,以便与组合框值edit结合。

我看到导航属性MyModel。IdModel可以提供这个功能,但是绑定源可以实现这个方法吗?

实体框架6 - 0.1关系映射

我不确定这正是您所需要的,但这将创建一个从Report到Model的可空外键关系,反之亦然:

public class Report
{
    public int ReportId { get; set; }
    public int? ModelId { get; set; }
    public Model Model { get; set; }
}
public class Model
{
    public int ModelId {get; set;}
    public Report Report { get; set; }
    public int ReportId { get; set; }
}
public class ReportConfiguration : EntityTypeConfiguration<Report>
{
    public ReportConfiguration()
    {
        this.ToTable("Report");
        this.HasOptional(m => m.Model).WithMany().HasForeignKey(m => m.ModelId).WillCascadeOnDelete(false);
    }
}

希望能有所帮助。

对于您的映射,Report是主体实体,这意味着Model具有外键。所以你不可能在Report中设置ModelId。你必须设置Model来代替。

从技术上讲,这不是什么大事。您可以使用Models填充组合框(或绑定源),而不是设置ValueMember并绑定SelectedItem

性能方面,它可能也不重要,除非Model有非常宽的记录,你打算只选择它的Id和Name属性。现在您必须从数据库中获取完整的对象。

我一直想知道为什么1-1 API不允许定义外键关联(即引用和原始外键对),而是强迫您使用独立的关联(仅限引用)。到目前为止,原因我还不清楚。在我看来,在这种情况下,Model可能在类模型中暴露了ReportId