Допустим, в нашем проекте мы используем C # и MsSQL, и у нас есть одна Products
таблица с двумя столбцами (ID
, Name
)
Однажды мы решили сохранить информацию о продукте, заданную Company1
, поэтому мы создали новую таблицу ProductInfoFromCompany1
, поскольку в ней есть настраиваемые столбцы (ProductID
, Price
, CurrentScore
)
На следующий день мы договорились с Company2
, и теперь нам нужно также сохранить их данные. Итак, новая таблица -> ProductInfoFromCompany2
с разными столбцами (ProductID
, Year
, Rating
)
В другой день мы договорились с Company3
и так далее ...
Итак, мы понятия не имеем, как будут выглядеть данные, предоставленные новыми компаниями. Вот почему нам нужно создать новую таблицу, потому что если мы используем одну таблицу Details
, она будет слишком широкой с многочисленными пустыми столбцами
В Entity Framework Core у нас есть следующие модели:
public class ProductInfoFromCompany1
{
public int Id { get; set; }
public int ProductId { get; set; }
public decimal Price { get; set; }
public double CurrentScore { get; set; }
public Product Product { get; set; }
}
public class ProductInfoFromCompany2
{
public int Id { get; set; }
public int ProductId { get; set; }
public int Year { get; set; }
public double Rating { get; set; }
public Product Product { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
//Do we need these navigation properties in this class?
//public ProductInfoFromCompany1 ProductInfoFromCompany1 { get; set; }
//public ProductInfoFromCompany2 ProductInfoFromCompany2 { get; set; }
}
Вы можете видеть, что мой вопрос комментируется в Product
классе.
Нужно ли добавлять навигационные свойства в класс Product
?
Причина, по которой я спрашиваю, состоит в том, что во всех прочитанных мной книгах или документах люди используют свойство навигации, но в этом случае оно нарушает принцип открытого-закрытого доступа, потому что всякий раз, когда мы добавляем новую компанию, нам необходимо изменить Product
класс тоже.
P.S. если мы хотим запросить данные ProductInfoFromCompany1
и у нас есть продукт Id
, мы можем просто начать запрашивать с ProductInfoFromCompany1
, например,
var info = _db.ProductInfoesFromCompany1.Where(c=>c.ProductId == productId);