EFCore необязательное отношение 1 к 1C#

Место общения программистов C#
Ответить
Anonymous
 EFCore необязательное отношение 1 к 1

Сообщение 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)


Подробнее здесь: https://stackoverflow.com/questions/790 ... lationship
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»