MVC4 首先使用 db 和 simplemembership
我的会员资格工作到可以保存新用户的程度。注册此人后,我需要渲染一个新视图,以便他们填写更多信息,因此我需要将 UserProfile 表中新创建的用户 ID 传递给新视图。我尝试将模板化的注册方法修改为:
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 个单独的连接字符串。
编辑++++++++++
我一直在研究并找到了不同的方法,但我得到了同样的错误。
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" />
你能看出我哪里错了吗?