Entity Framework Code First создает классы из двух таблиц и отношений один ко многим - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю приложение и в качестве примера для тестирования беру таблицу заказов.У меня есть вопросы о моделировании классов.

У меня есть 3 класса:

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; }
}

Я не знаю, в порядке ли эта модель.Как вы думаете?Потому что что-то здесь не идет: / В приложении:

  • Я не могу добавлять автомобили или запчасти к заказу, которого у меня нет в базе.

  • В таблице заказов я хотел бы видеть только идентификатор заказа, стоимость заказа и идентификатор автомобиля и идентификатор купленной детали.

Я бы хотел, чтобы в таблицах Car и Part не было данных о заказах.Я хотел бы добавить только части или автомобили в приложении, позже только выбрать из них в разделе заказа.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это хорошая модель?

  • Одна пицца может иметь несколько idgredience
  • Одна пицца может иметь один соус под сыром
  • Один заказ может иметьнемного idgredience и несколько соусов.

Это мои занятия:

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

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

public class Pizza
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
    public ICollection<Idgredient> Idgredients { get; set; }
    public Sauce Sauce {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> Suace  { get; set; }
    public virtual ICollection<Part> Pizza { get; set; }
}

public class Idgredient
{
    public int Id { get; set; }
    public string Name { get; set; }


    public virtual ICollection<Pizza> Pizzas { get; set; }
}
0 голосов
/ 18 февраля 2019

Давайте начнем с физических таблиц, которые вам понадобятся:

Part { Id, Name, Price }
Car { Id, Name, Price } 
Order { Id }

OrderPart* { OrderId, PartId }
OrderCar* { OrderId, CarId }

Последние две таблицы называются «таблицами объединения», поскольку они нужны для того, чтобы иметь возможность хранить несколько деталей и несколько автомобилей в одном порядке., но на самом деле это не таблицы, которые вы считаете частью своей модели.

Entity Framework автоматически создаст эти таблицы объединения, если вы настроите свои классы следующим образом:

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; }
}

Обратите внимание, чтосвойства ICollection <> в таблице Car и Part будут ключом к EF, необходимому для создания таблицы соединения.Кроме того, помните, что вам нужно "виртуальный" в ваших свойствах навигации.

...