2016-02-25 23 views
5

Ho una classe che contiene alcune proprietà. Per alcuni motivi architettonici, ho un'istanza di un altro oggetto nella mia classe.Mappatura fluente EF core alle proprietà dell'oggetto interno

semplice esempio

public class MyEntity { 
    public MySubEntity SubEntity {get; set;} 
} 

Per questo, ho creare la mappatura fluente come:

builder.ToTable(MyEntity.CONST_TABLE_NAME); 
builder.HasKey(m => m.Id); 
builder.Property(m => m.Column1).IsRequired(); 
builder.Property(m => m.SubEntity.Column2).IsRequired(); 

non riesco a integrare tutte le mie proprietà sottoentità nella mia entità principale (il mio sottoentità ha una propria intelligenza). Voglio solo mappare le mie proprietà di subentity, che NON sono memorizzate in una tabella separata, nella tabella myEntity.

L'ultima riga un'eccezione:

The expression 'm => m.SubEntity.Column2' is not a valid property expression. The expression should represent a property access: 't => t.MyProperty'. 

Come posso effettuare tale mappatura?

risposta

3

EF Core non supporta questo tipo di mappatura per ora. Non sarà supportato in EF core 1.0 RTM (vedi il mio problema GitHub: https://github.com/aspnet/Home/issues/1330)

Come ho descritto nel mio problema github, ho capito 2 soluzioni:

1) Creare una classe derivata da mio modello, appositamente progettato per EF, ed esporre tutte le proprietà come semplici. Avrà bisogno di più mappature quando inserisci/aggiorna e recupera da Db. Non scegliamo questa opzione

2) Crea proprietà proxy. Nel mio esempio, è simile a:

public class MyEntity { 
    private MySubEntity SubEntity {get; set;} 
    public string SubEntityValue 
    { 
    get 
    { 
     return SubEntity.Value; 
    } 
    set 
    { 
     SubEntity.Value = value; 
    } 
} 

Questa sembra essere la soluzione migliore (scegliamo questa).

Problemi correlati