Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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#_Sql_Asp.net Mvc_Entity Framework_Linq - Fatal编程技术网

C# 传递的主键值数必须与实体上定义的键值匹配

C# 传递的主键值数必须与实体上定义的键值匹配,c#,sql,asp.net-mvc,entity-framework,linq,C#,Sql,Asp.net Mvc,Entity Framework,Linq,我有一个表供用户扮演一个角色,它只是用户可以扮演的两个角色之一 CREATE TABLE [dbo].[webpages_UsersInRoles] ( [UserId] INT NOT NULL, [RoleId] INT NOT NULL, CONSTRAINT [PK_dbo.webpages_UsersInRoles] PRIMARY KEY CLUSTERED ([UserId] ASC, [RoleId] ASC), CONSTRAINT [FK_db

我有一个表供用户扮演一个角色,它只是用户可以扮演的两个角色之一

CREATE TABLE [dbo].[webpages_UsersInRoles] (
    [UserId] INT NOT NULL,
    [RoleId] INT NOT NULL,
    CONSTRAINT [PK_dbo.webpages_UsersInRoles] PRIMARY KEY CLUSTERED ([UserId] ASC, [RoleId] ASC),
    CONSTRAINT [FK_dbo.webpages_UsersInRoles_dbo.webpages_Roles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[webpages_Roles] ([RoleId]) ON DELETE CASCADE
);
CREATE TABLE [dbo].[webpages_Roles] (
    [RoleId]                     INT            IDENTITY (1, 1) NOT NULL,
    [RoleName]                   NVARCHAR (MAX) NULL,
    [webpages_Membership_UserId] INT            NULL,
    CONSTRAINT [PK_dbo.webpages_Roles] PRIMARY KEY CLUSTERED ([RoleId] ASC),
    CONSTRAINT [FK_dbo.webpages_Roles_dbo.webpages_Membership_webpages_Membership_UserId] FOREIGN KEY ([webpages_Membership_UserId]) REFERENCES [dbo].[webpages_Membership] ([UserId])
);
在我的代码中,我试图从
UsersInRoles
中删除一个用户,但我不断从tempdata中返回一个错误:

角色出错。传递的主键值数必须为 匹配在实体上定义的主键值的数目。参数 名称:键值

这是我正在使用的代码:

        string pid = form["pid"];

        try
        {
                if (ModelState.IsValid)
                {
                Provider cprovider = _db.Providers.Find(pid);
                var UserId = cprovider.UserProfileId;


                try
                {
                    webpages_Membership cmembership = _db.webpages_Memberships.Find(UserId);
                    _db.webpages_Memberships.Remove(cmembership);
                    _db.SaveChanges();
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured with membership." + ex.Message;
                }
                try
                {
                    UserProfile cprofile = _db.UserProfiles.Find(UserId);
                    _db.UserProfiles.Remove(cprofile);
                    _db.SaveChanges();
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured with profile." + ex.Message;
                }
                try // this code is causing an exception
                {
                    webpages_UsersInRoles croles = _db.webpages_UsersInRoles.Find(UserId);
                    _db.webpages_UsersInRoles.Remove(croles);
                    _db.SaveChanges();
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured with roles." + ex.Message;
                }


                cprovider.UserProfileId = null;
                cprovider.PendingActivation = null;
                cprovider.Activated = null;
                cprovider.Email = null;


                    _db.Entry(cprovider).State = EntityState.Modified;
                    _db.SaveChanges();
                }
            }

您的
Find
方法调用缺少一个参数-它需要
UserId
RoleId

_db.webpages_UsersInRoles.Find(UserId, RoleId)
如果您的目标是删除用户的所有角色,则不要使用查找方法,请使用
Where
w/
RemoveRange

var croles = _db.webpages_UsersInRoles.Where( uir => uir.UserId == UserId );
_db.webpages_UsersInRoles.RemoveRange( croles );