如何查询simplemembership数据库

时间:2013-05-27 22:06:45

标签: asp.net-mvc-4 simplemembership

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" />

你能看到我错在哪里吗?

2 个答案:

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

对我来说效果很好