2015-04-16 2 views
0

Я пытаюсь создать пользователя с WebSecurity.CreateUserAndAccount, и у меня возникают проблемы с вставкой объекта «Пользователь», у которого есть «Клиент», как его зависимость.Вставка зависимости объекта в WebSecurity.CreateUserAndAccount

Мой код:

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; } 
} 
+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. В этом случае вы должны обновить свой код.

+0

Спасибо, что поделились своими знаниями Стивен! Он работал хорошо. –

+0

Если вы не возражаете, не могли бы вы пометить этот ответ в качестве предпочтительного ответа, чтобы помочь другим, поскольку они видят, что на этот вопрос был дан ответ (и, конечно, я хотел бы получить репутацию :-)) –

+0

Конечно, Стивен! Извините за это, я здесь новый, и я привык! Извините и спасибо! ;) –

Смежные вопросы