EF 4.0 Entity не получает новые значения после вставки (выберите сущность после вставки) - PullRequest
2 голосов
/ 10 августа 2010

Я использую сущность Entity Framework 4.0 POCO. Я сопоставил пользовательскую хранимую процедуру со вставкой PROCEDURE [dbo]. [Usp_MyTable_Insert] (@ Value1 char (1), @ Value2 varchar (5), @ Value3 varchar (20) ....) КАК НАЧИНАЕТСЯ ВСТАВИТЬ СДЕЛКУ В «dbo». «MyTable» («Value1», «Value2», «Value3») ЗНАЧЕНИЯ (@ Value1, @ Value2, @ Value3)

DECLARE @Id int --Получить последний идентификатор.SET @Id = (SELECT CAST (@@ IDENTITY AS INT))

- обновить таблицу с некоторыми значениями UPDATE "dbo". "MyTable" SET Value3 = (ВЫБРАТЬ SomeTableColumn ОТ SomeTable, ГДЕ Something = Something) WHERE [Id] = @Id

СДЕЛКА СОВЕРШЕНИЯ

SELECT @Id AS "Id"

END

Это вставка объекта в базу данных, а затемобновление некоторых столбцов в базе данных с последующим возвращением идентификатораВсе довольно просто.

public int InsertRecord (RecEntity recEntity) {context.AddObject ("RecEntities", recEntity);

        context.SaveChanges();

        return recEntity.Id;
    } 

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

public RecEntity SingleRecEntity (Expression> where) {return context.RecEntities.Single (where);} Когда я вызываю этот метод, значения, вставленные хранимой процедурой, не приходят к сущности.

id = repository.InsertRecord (recEntity);recEntity = repository.SingleBrokerPreRegistration (x => x.Id == id);// новые значения не пришли сюда из базы данных

Я запускаю запрос, сгенерированный структурой сущностей, в анализаторе запросов, он возвращает все актуальные значения.Но по какой-то причине datacontext не хочет обновлять эту сущность.

Вероятно, должны быть какие-то способы изменить это.Может быть, кто-то может объяснить это поведение.Нужна помощь.

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

Попробуйте метод Обновить с параметром StoreWins.EF не обновляет значения в случае, если уже есть прикрепленный объект с указанным ключом сущности, если только метод Refresh явно не вызван

0 голосов
/ 21 января 2011

Если вы запустите .Load(Objects.MergeOption.OverwriteChanges) в коллекции, вы получите все новые добавленные элементы.Если вы хотите, чтобы удаленные элементы были «обновлены», вам необходимо отсоединить объекты от коллекции перед запуском .Load

Собрать все вместе (извините за vb)

For Each child in Parent.ChildCollection.ToArray()
    context.Detatch(child)
Next
Parent.ChildCollection.Load(Objects.MergeOption.OverwriteChanges)

Это работает для меня, но если бы есть более элегантный способ, я бы хотел это увидеть!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...