在WebSecurity.CreateUserAndAccount中插入对象依赖项

时间:2015-04-16 18:32:00

标签: asp.net-mvc

我正在尝试使用WebSecurity.CreateUserAndAccount创建一个用户,而我在插入具有'Client'之类的对象'User'时遇到了问题。

我的代码:

var client = new UserRepository(context).GetByEmail(email);

token = WebSecurity.CreateUserAndAccount(
        email,
        password,
        new
        {
              name,
              email,
              isAdmin,
              client
        });

此代码抛出此异常:

  

从对象类型System.Data.Entity.DynamicProxies.Client_3003777381BB2D4BFAC2DAB15BF164994D9EE8AB84E8AF4BED6DC161613271BB到已知的托管提供程序本机类型不存在映射。

我的模特:

public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    public virtual List<Monitoring> Monitoring { get; set; }
    public virtual List<User> Users { get; set; }
}

public class User
{
    [Key]
    public int id { get; set; }

    public string email { get; set; }
    public string name { get; set; }
    public bool IsAdmin { get; set; }

    public virtual Client Client { get; set; }
}

1 个答案:

答案 0 :(得分:1)

WebSecurity.CreateUserAndAccount()只能处理简单类型(最多为字符串),因此无法映射您的类引用。您可以执行以下操作:

public class User
{
    [Key]
    public int id { get; set; }

    public string email { get; set; }
    public string name { get; set; }
    public bool IsAdmin { get; set; }

    [ForeignKey("Client")]
    public int ClientId;

    public virtual Client Client { get; set; }
}

现在

token = WebSecurity.CreateUserAndAccount(
    email,
    password,
    new
    {
          name,
          email,
          IsAdmin = isAdmin,
          ClientId = client.Id
    });

您应该检查数据库中ClientId字段的名称。它也可以命名为Client_Id。在这种情况下,您应该相应地更新代码。