Добавление в предложение Where обновления в LinQ-to-Entities

Скажем, у меня есть таблица под названием Product с тремя столбцами: Id, CustomerId, Name. Идентификатор является первичным ключом. Схема находится вне контроля моей группы, и теперь у нас есть требование всегда предоставлять CustomerId в качестве параметра для всех запросов (выбирает, обновляет, удаляет). Это долгая история, о которой я бы не хотел... в нее входят триггеры: -P

Итак, мой вопрос в том, когда у меня есть прикрепленный объект в **************, и я хочу сохранить некоторые обновления (например, я обновляю имя в этом случае). Как я могу получить его для генерации SQL:

update Product set Name = @Name where Id=@Id and CustomerId=@CustomerId

Если параметр customerId включен в предложение where в дополнение к первичному ключу.

Спасибо: -)

2 ответа

Помогает ли CustomerId однозначно идентифицировать строку, прошедшую мимо @Id? Я действительно не выполнял бит "триггеры", поскольку предикат, используемый для обновления, неизвестен триггером. Или вы хотите повторно обновлять CustomerId каждый раз (определяемый с UPDATE(...) в триггере)

Самый простой вариант - сделать это как обновление объекта:

var qry = from product in model.Products
 where Id == @Id && CustomerId == @CustomerId
 select product;
foreach(Product p in qry) {
 p.Name = @Name;
}
model.SaveChanges(); // or whatever the method is in EF

Если вы знаете, что ожидаете одну запись, вы можете использовать:

Product prod = (from product in model.Products
 where Id == @Id && CustomerId == @CustomerId
 select product).Single();
prod.Name = @Name;
mode.SaveChanges(); // ditto

Вы могли бы также писать его как Entity-SQL, но я не уверен, что буду беспокоиться лично... (обновление: я только что проверил, и я Не думайте, что Entity-SQL включает DML, поэтому нет, вы не можете - вам придется использовать либо выше, либо обычную команду SQL/SPROC)


Один из способов - использовать сохраненный процесс для обновления. Это дает вам полный контроль над SQL.

Другой способ - добавить CustomerId в ключ сущности.

licensed under cc by-sa 3.0 with attribution.