MVC4首先使用db with simplemembership
我的会员资格工作到了可以保存新用户的程度。一旦人员注册,我需要渲染一个新视图,以便他们可以填写更多信息,所以我需要将UserProfile表中新创建的用户标识传递给新视图。我尝试将模板化寄存器方法修改为:
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email }, true);
WebSecurity.Login(model.UserName, model.Password);
//Get the userid for this new user
var db = new UsersContext();
int id = db.UserProfiles.Where(x => x.UserName == model.UserName).Select(x => x.UserId).FirstOrDefault();
return RedirectToAction("Edit", "Profile", id);
}
这给了我这个错误:
\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'UserProfile'没有定义键。定义此EntityType的键。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'UserProfiles'基于没有定义键的'UserProfile'类型。
我认为这个错误与尝试在不在edmx模型中的表上使用EF有关。我没有将任何简单成员表(UserProfile,Membership,Roles等)添加到我的edmx文件中,因为当我这样做时,我得到重复类的错误,我猜是因为SM表是先创建代码。
我从未做过任何代码,答案是否存在?或者我是否需要将SM表添加到我的edmx模型中,以便我可以查询它们。如果是这样,我如何解决重复的类错误?
我的网络配置中有2个单独的连接字符串。
EDIT ++++++++++
我一直在研究并发现了一种不同的方式,但我得到了同样的错误。
int id;
using (var db = new UsersContext())
{
var user = db.UserProfiles.Find(model.UserName);
id = user.UserId;
}
我在“使用”行上收到错误。以下是UsersContext的代码:
public class UsersContext : DbContext
{
public UsersContext()
: base("SecurityEntities")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
“SecurityEntities是连接字符串,如下所示:
<add name="SecurityEntities" connectionString="data source=(localdb)\v11.0;initial catalog=OurAgreements;user id=oaadmin;password=136VDSyPLrcfgPfw3BIH;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.SqlClient" />
你能看到我错在哪里吗?
答案 0 :(得分:1)
您对 UserProfile 的定义是什么样的。看起来应该是这样的:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
...
}
Key 属性表示 UserId 是密钥, DatabaseGeneratedAttribute 表示 UserId 值是由数据库生成。您收到的错误似乎表明您的 UserProfile 定义中没有 Key 属性。
2013年5月29日更新
如果您在更改UserProfile的架构时遇到问题而且未设置迁移,请查看显示how to customize and seed SimpleMembership的文章。本文中的设置更倾向于开发和测试您的应用程序。还有一篇关于setting up database migration for SimpleMembership的文章。
答案 1 :(得分:0)
我试过
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, false);
var ID = WebSecurity.GetUserId(model.UserName);
对我来说效果很好