После вызова хранимой процедуры Entity Framework таблицы обновляются в базе данных, но объекты остаются такими, какими они были - PullRequest
0 голосов
/ 15 марта 2011

Я создал две хранимые процедуры в SQL Server Management Studio.

Поле добавления первой процедуры в таблице ProjcetsToUsers (для ассоциаций "многие ко многим")

CREATE PROCEDURE sp_addUserToProject
    @userId int,
    @projectId int
AS
BEGIN
    SET NOCOUNT ON;             
    IF NOT EXISTS(SELECT * FROM ProjectsToUsers WHERE idProject = @projectId and idUser = @userId)  
        INSERT INTO ProjectsToUsers (idProject, idUser) VALUES (@projectId, @userId)    
END
GO

Поле удаления второй процедуры изэта таблица:

CREATE PROCEDURE sp_deleteUserToProject
    @userId int,
    @projectId int
AS
BEGIN
    SET NOCOUNT ON;         
    DELETE FROM ProjectsToUsers WHERE idProject = @projectId and idUser = @userId       
END
GO

Первая функция импорта обновления обновляет всю дату (в базе данных и объектах в сеансе):

Entities.AddUserToProject(projectId: project.id, userId: user.id);

Вторая функция импорта импортирует только поле обновления в базе данных = (

bugTrackerEntities.DeleteUserFromProject(projectId: project.id, userId: user.id);

Я попытался обновить обновления:

bugTrackerEntities.Refresh(RefreshMode.StoreWins, project);
bugTrackerEntities.Refresh(RefreshMode.StoreWins, user);
bugTrackerEntities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
project.Users.Load();
user.Projects.Load();

это не помогло = (

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

Почему это происходит?

1 Ответ

1 голос
/ 15 марта 2011

Если в вашем приложении есть как пользовательские, так и проектные сущности, вам эти процедуры вообще не нужны.Просто используйте:

project.Users.Add(user);

И

project.Users.Remove(user);

Причина, по которой это происходит, заключается в том, что EF не знает, что отношение изменилось.Попробуйте обновить отношения:

bugTrackerEntities.LoadProperty<Project>(project, p => p.Users,  
    MergeOptions.OverwriteChanges); 

Я боюсь, что у него все еще будет проблема с удаленным отношением - по крайней мере, в версии EFv1 (.NET 3.5 SP1) он не смогудалить существующее отношение , которое не было загружено из базы данных.

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