实体框架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可以提供这个功能,但是绑定源可以实现这个方法吗?
我不确定这正是您所需要的,但这将创建一个从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
。