public class Order
{
public int Id {get;set;}
[DisplayName("User")]
public long UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
public decimal Amount { get; set; }
}
Con IEnumurable
Quando esporre un oggetto IEnumerable invece di un ICollection?
public class User
{
public int Id{get;set;}
public virtual IEnumerable<Order> Orders { get; set; }
}
public User GetWithOrders()
{
var myUser=UserRepository.GetByEmail("[email protected]");
myUser.Orders=OrderRepository.GetByUserId(myUser.Id);
return myUser;
}
Con ICollection
public class User
{
public int Id{get;set;}
public virtual ICollection<Order> Orders { get; set; }
}
public User GetWithOrders()
{
var myUser=UserRepository.GetByEmail("[email protected]");
return myUser;
}
Non ho lazy loading usando IEnumerable
per una proprietà di navigazione. Pertanto, devo ottenere gli ordini per questo utente con un'altra query.
Ho una navigazione con ICollection
. Quindi posso raggiungere ordini da parte dell'utente. Questo sembra fico Ma poi posso aggiungere nuovi ordini all'utente nel controller senza utilizzare il servizio o il repository.
È una sorta di manipolazione dei dati a livello di controller. È questo anti-pattern?
In primo luogo, ho pensato anche a viewmodel. Ma non ero sicuro che potesse portare più complessità o meno. Userò i viewmodels se necessario. Grazie. –
Il punto non è il viewmodel, davvero. È il BLL o il modello di dominio. Un oggetto che rappresenta il tuo caso d'uso (un utente che può avere ordini). Usalo se non vuoi esporre i tuoi modelli di dati con le loro viscere esposte. – CodeCaster
Perché stai restituendo '_orders.AsEnumerable();' mentre '_orders' è già' IEnumerable '? –