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; }
}
Z IEnumurable
Kiedy odsłonić IEnumerable zamiast 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;
}
Z 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;
}
nie mam leniwy załadunku przy użyciu IEnumerable
dla właściwości nawigacji. Dlatego muszę uzyskać zamówienia dla tego użytkownika z innym zapytaniem.
Mam nawigację z ICollection
. Dzięki temu mogę uzyskiwać zamówienia od użytkownika. To wydaje się fajne. Ale potem mogę dodawać nowe zamówienia do użytkownika w kontrolerze bez korzystania z usługi lub repozytorium.
To rodzaj manipulowania danymi na poziomie kontrolera. Czy to anty-wzór?
Po pierwsze myślałem również o viewmodelu. Ale nie byłem pewien, czy może to przynieść więcej komplikacji, czy nie. Użyję viewmodels, jeśli będę musiał. Dzięki. –
Punkt nie jest naprawdę modelem widoku. To BLL lub model domeny. Obiekty reprezentujące Twój przypadek użycia (Użytkownik, który może mieć Zamówienia). Użyj tego, jeśli nie chcesz wystawiać swoich modeli danych z odsłoniętymi wnętrznościami. – CodeCaster
Dlaczego zwracasz '_orders.AsEnumerable();' podczas gdy '_orders' jest już' IEnumerable '? –