Я упростил то, что мне нужно, на примере книг (надеюсь, контекст все еще позволяет смысл).
Контекст таков: у меня есть канал, в этом канале указаны книги, продаваемые поставщиками, и цена, по которой они хотят их продавать. Мы являемся реселлером, клиент может выбрать книгу у поставщика и купить ее напрямую у него. Но мы хотим найти способ отменить цену книги для всех поставщиков.
Код: Выделить всё
public class SupplierBook
{
public int SupplierBookId { get; set; }
[ForeignKey("BookOverride")]
public int BookId { get; set; }
public int BookSupplierId { get; set; }
public decimal Price { get; set; }
public virtual BookOverride? BookOverride { get; set; }
}
public class BookOverride
{
[Key]
public int BookId { get; set; }
public decimal PriceOverride { get; set; }
[ForeignKey("BookId")]
public SupplierBook SupplierBook { get; set; }
}
public class Test
{
public void DoTest()
{
var bookFromSup1 = new SupplierBook() { SupplierBookId = 0, BookId = 10, BookSupplierId = 1, Price = 10.50M };
var bookFromSup2 = new SupplierBook() { SupplierBookId = 1, BookId = 10, BookSupplierId = 2, Price = 90.50M };
var bookFromSup3 = new SupplierBook() { SupplierBookId = 2, BookId = 11, BookSupplierId = 2, Price = 5.50M };
var priceOverride = new BookOverride() { BookId = 10, PriceOverride = 15.0M };
var context = new BookDBContext();
context.SupplierBooks.Add(bookFromSup1);
context.SupplierBooks.Add(bookFromSup2);
context.SupplierBooks.Add(bookFromSup3);
context.BookOverrides.Add(priceOverride);
context.SaveChanges();
var bookWithOveride = context.SupplierBooks
.Where(o => o.BookId == 10 && o.BookSupplierId == 2)
.Include(o => o.BookOverride).First();
Debug.WriteLine(bookWithOveride.BookOverride.PriceOverride); // prints 15.00
var bookWithNoOveride = context.SupplierBooks
.Where(o => o.BookId == 11 && o.BookSupplierId == 2)
.Include(o => o.BookOverride).First();
Debug.WriteLine(bookWithNoOveride.BookOverride == null); // prints true
}
}
ограничение внешнего ключа не выполнено (
Код: Выделить всё
.......Код: Выделить всё
...Код: Выделить всё
...Изменить для ясности:
Думайте о BookID как о номере ISBN. У каждого поставщика одна и та же книга по разным ценам. Мы хотим переопределить, чтобы ВСЕ книги с номером ISBN имели определенную цену, а не только книга от этого поставщика. Кроме того, если в таблице «SupplierBook» нет книг с этим номером ISBN, мы все равно хотим сохранить строку BookOverride, поскольку эта книга может снова появиться в ленте, и мы хотим использовать переопределенную цену. установлено ранее.
Таблица «Книга» отсутствует, так как нет общих полей, каждый поставщик может называть книгу немного по-разному, поэтому, например, «название книги» также будет в таблице ПоставщикКнига.
Подробнее здесь: https://stackoverflow.com/questions/790 ... lationship
Мобильная версия