EF Property指向成员中的成员

时间:2011-07-28 12:43:21

标签: c# .net entity-framework-4.1 xml-deserialization

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

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

  

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

参与者

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

PhysicalDetailsType

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

PhysicalFeatureType

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

PhysicalFeatureType EF Mapping

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

2 个答案:

答案 0 :(得分:2)

到目前为止,我所提出的只是创建一个隐藏嵌套的代理属性:

<强>参与者

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

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

答案 1 :(得分:0)

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

如果我理解正确,您的数据库中只有两个表(适用于ParticipantPhysicalFeatureType)但三个类 (中间有额外的PhysicalDetailsType)。 PhysicalDetailsType是&#34;中间&#34; type,是模型中一对多关系所必需的,但不作为数据库中的表存在,对吧? (只是为了理解,而不是我想知道如何绘制这个或者它是否可能。)