我的数据库(StarterSite)中有一个表(About_User)应该可以工作,这样每个单独的行都适用于每个单独的用户。但是,无论登录哪个用户,他们都可以访问同一行(换句话说,没有为每个新用户创建新行)。我检查了三次以确保我的数据库中的所有内容都已正确设置。我正在使用此注册页面的StarterSite模板(针对问题进行编辑):
// If all information is valid, create a new account
if (Validation.IsValid()) {
// Insert a new user into the database
var db = Database.Open("StarterSite");
// Check if user already exists
var user = db.QuerySingle("SELECT Email FROM UserProfile WHERE LOWER(Email) = LOWER(@0)", email);
if (user == null) {
// Insert email into the profile table
db.Execute("INSERT INTO UserProfile (Email) VALUES (@0)", email);
// Create and associate a new entry in the membership database.
// If successful, continue processing the request
try {
bool requireEmailConfirmation = !WebMail.SmtpServer.IsEmpty();
var token = WebSecurity.CreateAccount(email, password, requireEmailConfirmation);
if (requireEmailConfirmation) {
var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/Confirm?confirmationCode=" + HttpUtility.UrlEncode(token));
WebMail.Send(
to: email,
subject: "Please confirm your account",
body: "Your confirmation code is: " + token + ". Visit <a href=\"" + confirmationUrl + "\">" + confirmationUrl + "</a> to activate your account."
);
}
if (requireEmailConfirmation) {
// Thank the user for registering and let them know an email is on its way
Response.Redirect("~/Account/Thanks");
} else {
// Navigate back to the homepage and exit
WebSecurity.Login(email, password);
Response.Redirect("~/");
}
} catch (System.Web.Security.MembershipCreateUserException e) {
ModelState.AddFormError(e.Message);
}
} else {
// User already exists
ModelState.AddFormError("Email address is already in use.");
}
}
该表确实有一个(应该)自动增量的ID列。
其他列来自一个表单,该表单从“关于我”页面收集用户的不同信息,因此每个人都应该有所不同。
我该如何做到这一点?
答案 0 :(得分:0)
你的问题中有一些我不明白的事情。首先,您的代码不会被编辑(它与第39行到第82行的模板相同)。其次,你的问题有mysql标签:如果你使用MySql数据库而不是Starter Site模板的Sql Ce数据库,可能这可能是问题(看WebSecurity.CreateAccount fails for MySQL)。
使用默认的StarteSite Sql Ce数据库,您的问题的答案非常简单。添加以下行
db.Execute("INSERT INTO About_User(UserId, UserPage) VALUES (@0, @1)",
db.GetLastInsertId(), userPage);
在db.Execute("INSERT INTO UserProfile (Email) VALUES (@0)", email);
陈述之后。
您的About_User表中不需要ID自动增量列,但只需将UserId主键列作为外键。