Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过实体框架调用存储过程后,数据库中的表会更新,但实体保持原样_C#_Asp.net_Database_Entity Framework_Stored Procedures - Fatal编程技术网

C# 通过实体框架调用存储过程后,数据库中的表会更新,但实体保持原样

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

我在SQLServerManagementStudio中创建了两个存储过程

ProjcetsToUsers表中的第一个过程添加字段(用于多对多关联)

第二个步骤从此表中删除字段:

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);