Entity Framework Core v7+: выполнить удаление в таблицах, связанных с внешним ключом, без свойства навигацииC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Entity Framework Core v7+: выполнить удаление в таблицах, связанных с внешним ключом, без свойства навигации

Сообщение Anonymous »

У меня есть следующие две таблицы, каждая из которых содержит миллионы записей, поэтому требуется производительность для удаления.

Код: Выделить всё

Table Product
(
DateOf date not null,
Type varchar(100) not null,
ProductId int not null,
ProductCategory varchar(100) not null
Primary Key (DateOf,Type)
)

Table ProductListing
(
DateOf date not null,
Type varchar(100) not null,
RowId int identity(1,1) not null,
Quantity int not null,
Primary key(DateOf,Type,RowId)
Foreign key (DateOf,Type) references Product (DateOf,Type)
)
обычно удаление записи происходит по DateOf и ProductCategory (обратите внимание, что это поле не является частью первичного ключа)
У меня есть код EF, например, предполагая пользователь передает параметры даты и категории

Код: Выделить всё

dbContext.Product.Where(p=> p.DateOf = date && p.ProductCategory = category).ExecuteDelete()
Это правильно удаляет соответствующие записи из таблицы Product, но нам нужно слишком эффективно удалить запись из таблицы ProductListing. Идеальным оператором удаления будет

Код: Выделить всё

Delete pl from
ProductListing pl
inner join Product p on p.DateOf=pl.DateOf and p.Type=pl.Type -- join on foreign key
where
-- below are the parameters passed by user
p.DateOf = date
and p.ProductCategory = category
поэтому я хочу сгенерировать приведенный выше оператор удаления, используя структуру сущности, и выполнить его перед удалением из таблицы продуктов, а также выполнить удаление продукта, как показано выше в транзакции.
Я не уверен, как заставить ядро ​​Entity Framework создать такой оператор удаления. Обратите внимание, что приведенный выше оператор удаления необходим, поскольку количество записей огромно, и этот единственный оператор обеспечивает удаление одним оператором.
Обратите внимание, что каскадное удаление таблицы невозможно добавить из-за причины устаревших данных.

Подробнее здесь: https://stackoverflow.com/questions/784 ... es-without
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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