C# 通过实体框架调用存储过程后,数据库中的表会更新,但实体保持原样
我在SQLServerManagementStudio中创建了两个存储过程 ProjcetsToUsers表中的第一个过程添加字段(用于多对多关联) 第二个步骤从此表中删除字段:C# 通过实体框架调用存储过程后,数据库中的表会更新,但实体保持原样,c#,asp.net,database,entity-framework,stored-procedures,C#,Asp.net,Database,Entity Framework,Stored Procedures,我在SQLServerManagementStudio中创建了两个存储过程 ProjcetsToUsers表中的第一个过程添加字段(用于多对多关联) 第二个步骤从此表中删除字段: CREATE PROCEDURE sp_deleteUserToProject @userId int, @projectId int AS BEGIN SET NOCOUNT ON; DELETE FROM ProjectsToUsers WHERE idProjec
CREATE PROCEDURE sp_deleteUserToProject
@userId int,
@projectId int
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM ProjectsToUsers WHERE idProject = @projectId and idUser = @userId
END
GO
第一个函数导入更新所有日期(在数据库和会话中的实体中):
数据库中的第二个函数导入仅更新字段=(
我尝试刷新实体:
bugTrackerEntities.Refresh(RefreshMode.StoreWins, project);
bugTrackerEntities.Refresh(RefreshMode.StoreWins, user);
bugTrackerEntities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
project.Users.Load();
user.Projects.Load();
这没用=(
我可以从项目中删除该用户,然后添加另一个用户,然后添加新用户,但删除剩余用户。
对于数据库,这两个功能都能正常工作。
为什么会发生这种情况?如果应用程序中同时包含用户和项目实体,则根本不需要这些过程。只需使用:
project.Users.Add(user);
及
出现这种情况的原因是EF不知道关系已更改。请尝试以下操作以刷新关系:
bugTrackerEntities.LoadProperty<Project>(project, p => p.Users,
MergeOptions.OverwriteChanges);
bugtrackerenties.LoadProperty(项目,p=>p.Users,
合并选项。覆盖更改);
我很惊讶删除的关系仍然会有问题-至少在EFv1(.NET 3.5 SP1)版本中,它没有从数据库中加载。这些被称为存储过程(存储在SQL Server中)-不是存储过程…谢谢,但是LoadProperty不是hekful。添加和删除操作如何-这不起作用,因为“EF要求每个表必须具有可更新的主键。在您的情况下,您必须”。是的,它要求您修改连接表并从projectId和userId中添加复合键。它不会影响数据库中的任何内容。
bugTrackerEntities.Refresh(RefreshMode.StoreWins, project);
bugTrackerEntities.Refresh(RefreshMode.StoreWins, user);
bugTrackerEntities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
project.Users.Load();
user.Projects.Load();
project.Users.Add(user);
project.Users.Remove(user);
bugTrackerEntities.LoadProperty<Project>(project, p => p.Users,
MergeOptions.OverwriteChanges);