У меня возникла ситуация, когда мне нужно установить необязательное отношение 1 к 1 в EF Core.
Я упростил то, что мне нужно, на примере книг (надеюсь, контекст все еще позволяет смысл).
Контекст таков: у меня есть канал, в этом канале указаны книги, продаваемые поставщиками, и цена, по которой они хотят их продавать. Мы являемся реселлером, клиент может выбрать книгу у поставщика и купить ее напрямую у него. Но мы хотим найти способ отменить цену книги для всех поставщиков.
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
}
}
Используя текущий подход при вставке данных книги поставщиков, я получаю следующую ошибку:
foreign key constraint fails (`...`.`...`, CONSTRAINT `...` FOREIGN KEY (`...`) REFERENCES `...` (`...`) ON DELETE CASCADE)
Подробнее здесь: https://stackoverflow.com/questions/790 ... lationship
EFCore необязательное отношение 1 к 1 ⇐ C#
Место общения программистов C#
1728046391
Anonymous
У меня возникла ситуация, когда мне нужно установить необязательное отношение 1 к 1 в EF Core.
Я упростил то, что мне нужно, на примере книг (надеюсь, контекст все еще позволяет смысл).
Контекст таков: у меня есть канал, в этом канале указаны книги, продаваемые поставщиками, и цена, по которой они хотят их продавать. Мы являемся реселлером, клиент может выбрать книгу у поставщика и купить ее напрямую у него. Но мы хотим найти способ отменить цену книги для всех поставщиков.
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
}
}
Используя текущий подход при вставке данных книги поставщиков, я получаю следующую ошибку:
foreign key constraint fails (`...`.`...`, CONSTRAINT `...` FOREIGN KEY (`...`) REFERENCES `...` (`...`) ON DELETE CASCADE)
Подробнее здесь: [url]https://stackoverflow.com/questions/79054359/efcore-optional-1-to-1-relationship[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия