0

Я использую код сначала с MVC5, и я разработал некоторые из моих моделей, чтобы содержать ссылку на ApplicationUser. Идея состоит в том, чтобы сохранить созданного пользователем пользователя на важных бизнес-объектах.Невозможно вставить идентификатор ApplicationUser в мой контекст

например. модель:

public class Guest 
{ 
    ..... other properties 
    public ApplicationUser CreatedByUser { get; set; } 


} 

Контроллер:

public ActionResult Create(GuestVM model) 
{ 
    if (!ModelState.IsValid) 
    { 
     ..... 
     return View(model); 
    } 
    // Initialize a new instance of the data model and set its properties 
    Guest guest = new Guest() 
    { 
     ...... 
     CreatedByUser = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(User.Identity.GetUserId()) 
    }; 
    db.Guests.Add(guest); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

Он поднимает мой пользователь правильно, если я поставил точку останова перед тем db.Guests.Add (гостя); Я вижу правильную информацию там.

Вот OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired(); 
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); 
    modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new { u.UserId, u.LoginProvider, u.ProviderKey }); 
} 

Однако затем завершается с ошибкой при слежении

г. Член с идентичностью «Project.DAL.Guest_CreatedByUser» не существует в коллекции метаданных.

Я поместил все мои пользовательские модели в другом контексте. Возможно, это проблема ...

Помощь! :)

+0

Вы можете разместить свою конфигурацию OnModelCreating для Guest – singsuyash

+0

Конечно! Я редактировал OP. Спасибо за помощь –

ответ

1

Если вы собираетесь ссылаться на модели идентификации, они должны быть в одном контексте. Один из вариантов заключается в том, чтобы ваш контекст приложения наследовался от IdentityDbContext. У этого есть некоторые проблемы, если вы попытаетесь выделить слой данных. В противном случае вы можете сделать отдельный поиск. MVC5 Identity + multiple context in EntityFramework

+0

Это все еще не работает. выдает ту же ошибку :( –

+0

Если вы наследуете от IdentityDbContext, вам не нужен код OnModelCreating сверху, который обрабатывается автоматически. То же самое для DbSets - не нужно. Просто определите отношения от вашего объекта в ApplicationUser. –

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