Сохранение изменений в сущности, сопоставленной с представлением - PullRequest
0 голосов
/ 04 марта 2019

Могу ли я использовать Entity Framework для сохранения изменений в представлении?

У меня есть объект, который сопоставлен с представлением.

[Table("MyView")]
public class MyEntity
{
    public long MyEntityId { get; set; }

    public string Name { get; set; }
}

Само представление выглядит так:

CREATE VIEW MyView AS 
SELECT 
    t.MyEntityId,
    t.Name,
FROM 
    MyTable t

Смогу ли я использовать отслеживание изменений Entity Framework для сохранения изменений в этом представлении?Так что-то вроде этого возможно:

var record = Context.MyEntity.Where(e => e.MyEntityId == 150).FirstOrDefault();
record.Name = "New Name";
Context.SaveChanges();

1 Ответ

0 голосов
/ 05 марта 2019

Похоже, Entity Framework не волнует, сопоставлен ли Entity с представлением или таблицей ... он просто создал бы тот же сценарий обновления.Для приведенного выше примера EF генерирует следующий сценарий:

UPDATE [MyView] SET [Name]=@gp1 WHERE [MyEntityId] = 150
-- @gp1: 'New Name' (Type = String, IsNullable = false, Size = 8)

Таким образом, EF не вводит каких-либо дополнительных ограничений для обновления View ..., но у нас все еще есть определенные ограничения СУБД для обновления View ... asНапример, в SQL Server представление может быть обновлено с учетом следующих ограничений :

  • Если представление содержит объединения между несколькими таблицами, вы можете тольковставьте и обновите одну таблицу в представлении, и вы не сможете удалить строки.

  • Нельзя напрямую изменять данные в представлениях на основе запросов объединения.Вы не можете изменять данные в представлениях, использующих операторы GROUP BY или DISTINCT.

  • На все изменяемые столбцы распространяются те же ограничения, как если бы операторы выполнялись непосредственно в базовой таблице..

  • Текстовые и графические столбцы нельзя изменить с помощью представлений.

  • Проверка критериев просмотра не производится.Например, если представление выбирает всех клиентов, которые живут в Париже, и данные изменяются на
    , либо добавляется или редактируется строка, в которой нет City = 'Paris', данные
    будут изменены в базовой таблице.но не отображается на виде, если при определении вида не используется
    WITH CHECK OPTION.

...