2012-01-05 7 views
7

Sto usando l'ultima versione di Entity Framework (4.2) e sto provando ad implementare interfacce per le mie Entità e per qualche motivo, non si sta compilando. sta generando un errore "Cannot convert expression type ICollection<IOrder> to return type ICollection<Order>". se non utilizzo le interfacce per le entità, allora non ottengo questo errore.errore quando si usano le interfacce per entità Entity Framework (4.2)

Ho un progetto separato per interfacce (per repository e servizi ecc.) E ho bisogno di passare le entità EF in questi metodi come parametri e non voglio passare le entità effettive in esse, perché ciò richiederà il progetto di interfaccia per avere una dipendenza dalle entità EF.

il mio obiettivo è in qualche modo simile a quello di cui in questo post Can I abstract Entity Framework away from my Entities?

qui è il campione. Ho appena messo un campione qui, le mie entità reali sono diverse, ma il problema è lo stesso.

public interface IOrder 
{ 
    int OrderId { get; set; } 
    int CustomerId { get; set; } 
    ICustomer Customer { get; set; } 
} 

public class Order : IOrder 
{ 
    public int OrderId { get; set; } 
    public int CustomerId { get; set; } 
    ICustomer Customer { get; set; } 
} 

public interface ICustomer 
{ 
    int CustomerId { get; set; } 
    ICollection<IOrder> Orders { get; set; } 
} 

public class Customer : ICustomer 
{ 
    public int CustomerId { get; set; } 
    ICollection<IOrder> Orders { get; set; } 
} 

public class OrderMap : EntityTypeConfiguration<Order> 
{ 
    this.HasOptional(t => t.Customer) 
    .WithMany(t => t.Orders) //error comes from this line 
    .HasForeignKey(d => d.CustomerId); 
} 
+0

possibile soluzione al http://stackoverflow.com/questions/9805329/how-to-use-interface-properties-with-codefirst/10994290 # 10994290 – Cel

risposta

6

Il framework di entità non è in grado di funzionare con le interfacce. Le proprietà di navigazione devono utilizzare i tipi di entità reali (classi mappate).

+0

ma ho un progetto che consiste solo di interfacce, per esempio, diciamo che ho un "IOrderService" che ha un metodo chiamato "IEnumerable GetOrders (Cliente cliente cliente) "(che a sua volta chiamerà un repository per recuperare i dati. Pls non cerca di trovare difetti in questo, è solo un esempio). Non posso usare il tipo di entità reale qui perché questo progetto deve avere un riferimento a entità reali che non sembra l'approccio giusto in quanto il progetto di interfaccia ha un riferimento al tipo reale. dovrebbe essere normalmente in altro modo. – RKP

+0

infatti ho tutte le entità EF in un progetto separato dal progetto Entity Framework per utilizzarle come oggetti business senza alcuna dipendenza dalla persistenza. tutta la mappatura e il contesto del database ecc sono in un progetto separato ha un riferimento al progetto entità. – RKP

+0

Questo non dipende dalla persistenza. Questa è solo dipendenza tra entità e EF lo richiede. Semplicemente EF non lo supporta e non sono a conoscenza di alcuna soluzione alternativa. Unisci le tue interfacce e le entità al singolo assemblaggio e definisci le proprietà di navigazione con tipi di entità reali. –

1

"È possibile aggiungere i propri file di classe parziale per specificare le interfacce da attuare - e per fornire eventuali modalità di concreta attuazione è necessario" - come suggerito here

Problemi correlati