复杂类型的EF-Code First导航属性外键

时间:2015-10-11 13:22:15

标签: ef-code-first entity-framework-6

我有审计字段的复杂类型

我的复杂类型:

[ComplexType]
public class AuditData  {
    [Column("CreatorUserId")]
    public int? CreatorUserId { get; set; }
    public DateTime? CreationTime { get; set; }
    [Column("ModifierUserId")]
    public int? ModifierUserId { get; set; }
    public DateTime? ModificationTime { get; set; }
}

我的基本实体(所有其他inherti)具有AuditData属性:

public abstract class Entity : IEntity, IAuditedEntity, INotifiedDbContextBeforeSave
{

    // Summary:
    //     Unique identifier for this entity.
    public int Id { get; set; }
    public bool IsActive { get; set; }
    public int Old_Id { get; set; }
    public string Old_TableName { get; set; }        
    [Timestamp]
    public byte[] RowVersion { get; set; }        
    public AuditData AuditData { get; set; }
    // can this 2 lines below work as navigation property with foreign key in complex type
    public virtual User CreatorUser { get; set; }
    public virtual User ModifierUser { get; set; }

    //... other fields
}

我有2个导航属性CreatorUser和ModifierUser。 我知道你不能在ComplexType中拥有导航属性,但实体上的导航属性可以用complexType中的外键映射

类似的东西:

    [ForeignKey("CreatorUserId")] // --> should point to AuditData.CreatorUserId
    public virtual User CreatorUser { get; set; }

因为CreatorUserId将是每个实体的属性,但EF不知道它。 Mybe有流畅的API解决方案吗?

1 个答案:

答案 0 :(得分:3)

official documentation说:

  

复杂类型是实体类型的非标量属性,可以在实体中组织标量属性。与实体类似,复杂类型由标量属性或其他复杂类型属性组成。由于复杂类型没有键,因此除了父对象之外,实体框架不能管理复杂类型对象。

由此可见,复杂类型不能参与实体之间的任何关系,因此它们不能包含外键