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