如何在Fluent中使用ComplexType - CodeFirst

时间:2016-01-18 13:14:04

标签: c# entity-framework ef-code-first migration

在我的项目中,我希望为每个表记录一些事件,如下面的事件:

CreatedOn, CreatdBy,IsDeleted,DeletedBy,DeletedOn

为此,我创建了一个这样的ComplexType:

 [ComplexType]
public class Log
{
    public DateTime CreatedOn { get; set; }
    public User CreatedBy { get; set; }
    public Guid CreatorId { get; set; }
    public bool IsDeleted { get; set; }
    public User DeletedBy { get; set; }
    public Guid? DeletedUserId { get; set; }

}

}

并在另一个表中使用,如下所示:

 public class StoreMaster
{
//some fields
public virtual Log Log { get; set; }
}

我有这样的Fluent:

 HasRequired(row => row.Log.CreatedBy).WithMany(row => row.StoreMasters).HasForeignKey(row => row.Log.CreatorId).WillCascadeOnDelete();

运行Project I时出现此错误:

  

表达式'row => row.Log.CreatedBy'不是有效的属性表达式。表达式应代表一个属性:C#:'t => t.MyProperty'VB.Net:'Punction(t)t.MyProperty'。

1 个答案:

答案 0 :(得分:1)

我害怕你想要实现的目标是不可能的。首先是复杂类型只能包含基元属性,因此您无法在那里声明导航属性。第二件事是您在复杂类型中定义的标量属性不能用于关系的定义。您将复杂类型声明为属性的父对象是唯一可以管理它的人。