【发布时间】:2017-09-15 05:42:14
【问题描述】:
我在使用 EntityFramework 6 将复杂类型映射到模型类(称为 Assignment)时遇到问题。
我有以下Assignment模型类(仅显示相关成员):
public class Assignment
{
private AssignmentDueByInfo _dueIn;
public Assignment() {
_dueIn = new AssignmentDueByInfo(this)
}
public virtual AssignmentSettingInfo DueIn
{
get { return _dueIn; }
protected set { _dueIn = value; }
}
}
其中AssignmentSettingInfo 定义为:
public class AssignmentSettingInfo
{
protected AssignmentSettingInfo(Assignment assignment)
{
Assignment = assignment;
}
protected readonly Assignment Assignment;
public virtual int? LessonId { get; protected set; }
public virtual Lesson Lesson { get; protected set; }
}
在 Entity Framework 6 中,我将 Assignment 类的以下 CodeFirst / Fluent API 映射到数据库中的表:
Property(t => t.DueIn.LessonId).HasColumnName("DueByLessonId");
HasOptional(x => x.DueIn.Lesson)
.WithMany(x => x.AssignmentsDue)
.HasForeignKey(x => x.DueIn.LessonId)
.WillCascadeOnDelete(true);
映射抛出以下错误:
表达式“x => x.DueIn.Lesson”不是有效的属性表达式。该表达式应表示一个属性:C#: 't => t.MyProperty'
为什么会发生这种情况,应该如何解决?
【问题讨论】:
-
我认为这是 EF 的限制 - 复杂类型不能包含导航属性。
标签: c# entity-framework ef-code-first