gpt4 book ai didi

asp.net - 当我拥有 Membership.GetUser().ProviderUserKey 时,MVC3 从另一个表中获取 Id

转载 作者:行者123 更新时间:2023-12-04 05:46:41 25 4
gpt4 key购买 nike

我对 MVC 世界比较陌生,正在开发使用默认 Microsoft 成员资格提供程序的 MVC3、C# .Net、EF4 应用程序。需要将一些附加字段附加到成员资格提供程序表,这有助于为每个用户组成扩展配置文件。 (保存此数据的表称为 Profile,它有一个 ProfileId INT 的 PK,还保存了来自 aspnet_Users/aspnet_Membership 的 UserId 的 FK。)

我想让新用户有机会在注册后立即填写他们的个人资料,因此我将他们重定向到一个页面,他们可以在其中立即为个人资料表输入我们想要的值。注册工作正常。用户已创建,数据库中的配置文件记录也已创建。

出现问题的地方是当我让用户进入该个人资料编辑页面时,我尝试提取他们的数据。我将进入 System.Web.Security.Membership.GetUser().ProviderUserKey 以获取 UserId,然后基于此找到他们的 Profile 记录。

这确实有效,我以为我已经弄清楚了,但是我一定是在某个地方犯了错误,现在无法使其正常工作。该错误消息相当通用,似乎表明您无法使用 UserId 的 GUID 值找到 ProfileId INT 值。

    // GET: /Profile/Entry/

public ActionResult Entry()
{
Guid currentUser = (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
Profile profile = db.Profiles.Find(currentUser);
ViewBag.UserId = new SelectList(db.aspnet_Users, "UserId", "UserName", profile.UserId);
return View(profile);
}

现在错误信息:
Server Error in '/' Application.
--------------------------------------------------------------------------------

The argument types 'Edm.Int32' and 'Edm.Guid' are incompatible for this operation. Near WHERE predicate, line 1, column 76.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.EntitySqlException: The argument types 'Edm.Int32' and 'Edm.Guid' are incompatible for this operation. Near WHERE predicate, line 1, column 76.

Source Error:
Line 127: {
Line 128: Guid currentUser = ( Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
Line 129: Profile profile = db.Profiles.Find(currentUser);
Line 130: ViewBag.UserId = new SelectList(db.aspnet_Users, "UserId", "UserName", profile.UserId);
Line 131: return View(profile);

即使默认/假定的 Id 列是 ProfileId INT,有关如何专门针对 db.Profiles.Find(currentUser) 查找 UserId GUID 值的任何想法?

最佳答案

Find 根据主键搜索表,在您的情况下,主键是 int 并且与 Membership Provider Key(这是一个 guid)无关。所以你不能使用查找。

而是使用 Linq 查询,例如:

Profile profile = db.Profiles.Where(x => x.AspMembershipUserID == currentUser).FirstOrDefault();

关于asp.net - 当我拥有 Membership.GetUser().ProviderUserKey 时,MVC3 从另一个表中获取 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com