EF 属性指向成员中的成员

本文关键字:成员 属性 EF | 更新日期: 2023-09-27 18:03:43

上下文:我正在尝试对 XML 反序列化和 EF 4.1 数据持久性使用相同的模型集。 我无法更改现有的 XSD 或数据库架构。

问题:对于某些模型,XML 结构与表结构不太一致。 目前,(基于 XML(模型中将数据库一对多关系定义为父子子级的三级层次结构。 这会导致错误:

表达式 't => t.PhysicalDetails.PhysicalFeatures' 不是有效的属性表达式。

参与者

class Participant {
  public PhysicalDetailsType PhysicalDetails { get; set; }
}

物理详细信息类型

class PhysicalDetailsType {
  [XmlArray("PersonPhysicalFeature")]
  public List<PhysicalFeatureType> PhysicalFeatures { get; set; }
}

物理特征类型

class PhysicalFeatureType {
  public int CaseSk { get; set; }
  public int ParticipantSk { get; set; }
  public Participant participant { get; set; }
}

物理特征类型 EF 映射

class PhysicalFeatureMap : EntityTypeConfiguration<PhysicalFeatureType> {
  HasRequired(t => t.Participant)
    .WithMany(t => t.PhysicalDetails.PhysicalFeatures)
    .HasForeignKey(d => new { d.CaseSk, d.ParticipantSk});
}

EF 属性指向成员中的成员

到目前为止,

我想出的只是创建一个隐藏嵌套的代理属性:

参与者

class Participant {
  public PhysicalDetailsType PhysicalDetails { get; set; }
  public List<PhysicalFeatureType> PhysicalFeatures {
    get { return PhysicalDetails.PhysicalFeatures; }
    set { Physicaldetails.PhysicalFeatures = value; }
  }
}

到目前为止似乎正在工作。

所有

映射方法(HasRequiredWithMany等(中的表达式都必须指定一个属性,该属性在方法的泛型类型上声明(lambda 变量t在您的示例中属于 Participant 类型(。 Participant没有属性PhysicalDetails.PhysicalFeatures。可以这么说,表达式不能包含多个点。

如果我理解正确,数据库中只有两个表(用于ParticipantPhysicalFeatureType(,但模型中有三个(中间有额外的PhysicalDetailsType(。PhysicalDetailsType是"中间"类型,对于模型中的一对多关系是必需的,但不作为数据库中的表存在,对吗?(只是为了理解,并不是说我会知道如何映射它,或者是否有可能。