2014-05-29 2 views
7

Я застрял в нечетной проблеме.Несколько наборов объектов для каждого типа не поддерживаются. Наборы объектов «ApplicationUsers» и «Users» могут содержать экземпляры типа ApplicationUser

Я изучаю MVC 5 и почти все создано встроенным шаблоном. я только добавил класс История

public class History 
{ 
    [Key] 
    public DateTime Date { get; set; } 

    public virtual ApplicationUser User { get; set; } 

    public string ItemName { get; set; } 

} 

А внутри встроенного ApplicationUser:

public class ApplicationUser : IdentityUser 
    { 
     public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
     { 
      // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      // Add custom user claims here 
      return userIdentity; 
     } 

     public virtual ICollection<History> Histories { get; set; } 
    } 

Вот сообщение об ошибке:

Multiple object sets per type are not supported. The object sets 'ApplicationUsers' and 'Users' can both contain instances of type 'MyOnlineShopping.Models.ApplicationUser'. 

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.InvalidOperationException: Multiple object sets per type are not supported. The object sets 'ApplicationUsers' and 'Users' can both contain instances of type 'MyOnlineShopping.Models.ApplicationUser'. 

    Source Error: 


    Line 124:   { 
    Line 125:    var user = new ApplicationUser() { UserName = model.Email, Email = model.Email }; 
    Line 126:    IdentityResult result = await UserManager.CreateAsync(user, model.Password); 
    Line 127:    if (result.Succeeded) 
    Line 128:    { 
Source File: f:\Workplace\MyOnlineShopping\MyOnlineShopping\Controllers\AccountController.cs Line: 126 
+0

Я столкнулся с той же проблемой. В моем случае все работало нормально, пока я не добавил действие моему контроллеру, а затем добавил представление к действию. Я удалил действие и представление, но все равно получаю сообщение об ошибке. (Это единственные две вещи, которые я знаю о добавлении) –

+1

привет @JohnS Я думаю, что нашел «поверхностный ответ» для этого. Я обнаружил, что кажется, что EntityFramework автоматически добавила коллекцию IdentityUser в ApplicationUser. Я удалил это, проблема исчезла. Надеюсь, это поможет вам. – Franva

ответ

-3

Я в конечном итоге переименования ApplicationUser Пользователю, вскрытие и все волшебное начало работать.

Похоже, что шаблоны немного из-под контроля.

+0

Привет, Джон, я переименовал ApplicationUser в User (тоже не работал), но не переосмыслил. Как вы справлялись? – Franva

+1

Я вызвал всплытие, создав другой вид из действия, использующего класс User. Я уверен, что есть лучший или более прямой способ, но я не могу найти этот вариант меню, поэтому я пошел по этому маршруту. –

+0

ha, thx John ~~~ – Franva

21

Вышеупомянутая работа - это просто работа. Есть много ответов на эту же проблему вокруг SO.

Here

Here

и Here

Просмотр IdentityModel.cs, вы найдете

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 

Внутри этого контекста, VS иногда добавляет DbSet<ApplicationUser> ApplicationUsers

ЭТО DUPLICATE

Внутри класса IdentityDbContext является DbSet пользователя, когда вы создаете подкласс от IdentityContext, наследование преобразует эту строку в DbSet<ApplicationUser> User.

Исправить? Удалите DbSet<ApplicationUser> User от public class ApplicationDbContext : IdentityDbContext<ApplicationUser>

+0

Почему вы смело «ЭТО ДУБЛИРОВАНО»? –

+0

Чтобы добавить акцент в том, что дубликат DbSet находится в этом месте –

+0

Привет, Джейк, много. Я все еще помню код, даже 4 месяца назад. Я помню код, упомянутый в моем проекте. Я дам ему попробовать. thx – Franva

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

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