2015-10-11 6 views
6

Ho tipo complesso per i campi di auditEF-Code First proprietà di navigazione chiave esterna nel tipo complesso

mio tipo complesso:

[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; } 
} 

mio Entity base (tutti gli altri inherti questo) ha la proprietà 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 
} 

Ho 2 proprietà di navigazione CreatorUser e ModifierUser. So che non si può avere proprietà di navigazione in ComplexType ma possibile la mia proprietà di navigazione a un'entità essere mappate con chiave esterna nella complexType

qualcosa di simile:

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

siccome CreatorUserId saranno di proprietà in ogni entità, ma EF non è esserne consapevoli. Mybe c'è una soluzione in API fluente?

risposta

3

Il official documentation dice:

tipi complessi sono immobili non scalari di tipi di entità che consentono proprietà scalari ad essere organizzate all'interno di entità. Come le entità, i tipi complessi sono costituiti da proprietà scalari o altre proprietà di tipi complessi. Poiché i tipi complessi non hanno chiavi, gli oggetti di tipo complesso non possono essere gestiti da Entity Framework a parte l'oggetto genitore.

Ne consegue che che i tipi complessi non possono partecipare ad eventuali relazioni tra le entità, quindi non possono contenere chiavi esterne