我有两个班级:
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 =&gt; c.IdModel)配置
我需要这个,因为我们有一个使用绑定源的表单,报表可以有或没有模型(因为我们制作动态报表)。
我不想创建一个伪外键,比如创建属性和报表插入,我使用模型中的主键设置此属性值。这是我发现用正确的值填充bindingsource以与组合框值编辑绑定的方法。
我看到导航属性MyModel.IdModel可以提供这种功能,但绑定源是否可以实现这种方法?
答案 0 :(得分:0)
我不确定这正是您所需要的,但这将创建一个可以从“报告”到“模型”的可空外键关系,反之亦然:
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);
}
}
希望它有所帮助。
答案 1 :(得分:0)
通过映射,Report
是主要实体,这意味着Model
具有外键。因此,无论如何,您都无法在ModelId
中设置Report
。您必须设置Model
。
从技术上讲,这不是什么大问题。您可以使用Models
填充组合框(或绑定源),而不是设置ValueMember
并绑定SelectedItem
。
在性能方面,它可能并不重要,除非Model
具有非常宽的记录,并且您只想选择其Id和Name属性。现在你必须从数据库中获取完整的对象。
我一直想知道为什么1-1 API不允许定义外键关联(即引用和原始外键对),但强制您使用独立关联(仅参考)。到目前为止,原因尚不清楚。我认为,在这种情况下,Model
可能在类模型中暴露了ReportId
。