繁体   English   中英

实体框架6-0..1 RelationShip映射

[英]Entity Framework 6 - 0..1 RelationShip Mapping

我有两节课:

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)配置

我之所以需要它,是因为我们有一个使用绑定源的表单,并且一个报告可以有或没有模型(因为我们制作了动态报告)。

我不想创建伪造的外键,例如创建属性,并在报表插入时,使用模型中的主键设置此属性值。 这是我发现用组合框值编辑绑定的正确值填充绑定源的方法。

我看到导航属性MyModel.IdModel可以提供此功能,但是绑定源可以完成此方法吗?

我不确定这是否正是您所需要的,但这会创建从报表到模型的可空外键关系,反之亦然:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM