Entity Framework Code First tworzenie klas i relacji jeden do wielu.

0

Witam.

Tworzę aplikację i za przykład do testowania biorę sobie tabelę zamówień. Mam 2 pytania odnośnie modelowania klas.

Mam 3 klasy :


public class Car
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
    }
 
public class Part
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
    }
 
   class Order
    {
        public Order()
        {
            Cars = new List<Car>();
            Parts = new List<Part>();
        }
 
        public int OrderId { get; set; }
 
        public int CarId { get; set; }
        public int PartId { get; set; }
 
        public ICollection<Car> Cars { get; set; }
        public ICollection<Part> Parts { get; set; }
    }



Nie wiem czy taki model jest ok. Co myślicie ? Bo cos mi sie tu nie spina :/ W aplikacji :

  • Nie mogę do zamówienia dodawać samochodów i części których nie mam w bazie.

  • W tabeli zamówień chciałbym tylko widzieć Id zamówienia, wartość zamówienia oraz Id samochodu i Id czesci która była kakupiona.

Chcialbym aby tabele Car i Part nie mialy danych o zamowieniach. Chcialbym w aplikacji tylko dodawac czesci albo samochody, pozniej tylko moc z nich wybierac w sekcji zamowienia.

0

A nie wystarczy w order napisać tak?

        public List<Car> Cars{get;set;}
        public List<Part> Parts{get;set;}
        
        public Order()
        {
        }

bez tych Icolletionów?

Podczas tworzenia obiektu Orders, konstruktor domyślnie stworzy te listy, tak mnie się wydaje, ale niech mądrzejsi się wypowiedzą ;-]

ewentualnie spóbuj jescze tak

public ICollection<Car> Cars{ get; set; } = new List<Car>();

też poza konstruktorem

3

Masz źle zrobioną relację. Po co w Order CarId jak on ma listę Car ?. Jak dla mnie to powinna być many to many. Czyli wiele zamówień ma wiele części, co wymaga dodatkowej tabeli np OrderItem

0

Zrobiłem teraz coś takiego tworząc tabele pośrednie :


public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}
public class Part
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}

class Order
{
    public Order()
    {
        Cars = new List<Car>();
        Parts = new List<Part>();
    }

    public int OrderId { get; set; }

    public virtual ICollection<Car> Cars { get; set; }
    public virtual ICollection<Part> Parts { get; set; }
}

0

@Aventus wiem że się tak nie da. Dlatego klasy są tak skonstruowane i generują pośrednie tabele. Dalej w sumie nie jestem pewnien czy to aby na pewno dobre rozwiązanie. Potrzebne mi na pewno relacje many to many. Chciałbym również zapoznać się jak tworzyć takie zamówienie że chcę sworzyć zamówienie i że w skład zamówienia będzie wchodził Car z ID = 1 , Car z Id = 2 i np 2 części z PartId = 1

0

Może musisz wejść np w dziedziczenie. Car i Part dziedziczą po Product a orderitem zawiera Product.
Coś jak tutaj: https://entityframework.net/tpt

0
Potrzebne mi na pewno relacje many to many.

powiedz co chcesz osiagnac. Podaj biznesowy use case

0

Mam aplikację to tworzenia zamówień. Model z samochodami i częściami jest tylko testowy.
Aplikacja to Burgerowania.

  • Tablica ze składnikami (Id,Name)
  • Tablica z sosami(Id,Name,Price)
  • Tablica z Burgerami ( Id, Name ,** Lista **składników( dostępnych w tablicy składnik) oraz jeden sos pod bułkę :D ( dostępnych z tablicy sosy)
  • Tablica z Zamówieniami ( IdZam) oraz elementy zamówienia czyli listy burgerów i listy sosów bo do zamowienia można dokupić sosy(ile sie chce).

1 użytkowników online, w tym zalogowanych: 0, gości: 1