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});
}
到目前为止,
我想出的只是创建一个隐藏嵌套的代理属性:
参与者
class Participant {
public PhysicalDetailsType PhysicalDetails { get; set; }
public List<PhysicalFeatureType> PhysicalFeatures {
get { return PhysicalDetails.PhysicalFeatures; }
set { Physicaldetails.PhysicalFeatures = value; }
}
}
到目前为止似乎正在工作。
所有
映射方法(HasRequired
、WithMany
等(中的表达式都必须指定一个属性,该属性在方法的泛型类型上声明(lambda 变量t
在您的示例中属于 Participant
类型(。 Participant
没有属性PhysicalDetails.PhysicalFeatures
。可以这么说,表达式不能包含多个点。
如果我理解正确,数据库中只有两个表(用于Participant
和PhysicalFeatureType
(,但模型中有三个类(中间有额外的PhysicalDetailsType
(。PhysicalDetailsType
是"中间"类型,对于模型中的一对多关系是必需的,但不作为数据库中的表存在,对吗?(只是为了理解,并不是说我会知道如何映射它,或者是否有可能。