[英]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.