Подтвердить что ты не робот

Пользователь в объекте типа MVC5 EF6

Я создал класс в MVC5, где я хочу основного владельца контента, а затем хочу иметь некоторые редакторы для контента:

public class Content
{
    public int ID { get; set; }
    public IdentityUser Owner { get; set; }
    public ICollection<IdentityUser> Editors { get; set; }
    public string Title{ get; set; }
    public string Body { get; set; }
}

В контексте базы данных у меня есть следующий код:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Content>()
        .HasOptional(c => c.Editors)
        .WithRequired()
        .WillCascadeOnDelete();

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete();
}

Я бы предположил, что Microsoft реализовала объект IdentityUser таким образом, что его можно использовать в других типах сущностей, поэтому я, вероятно, что-то делаю неправильно, потому что когда я пытаюсь создать контроллер для объекта Content type, я получаю следующую ошибку:

EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no key defined
EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no key defined

Я также попытался добавить следующий код в ApplicationDbContext, как описано в этом вопросе Таблицы карт, используя беглый api в asp.net MVC5 EF6?:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}

Я должен делать что-то неправильно. Скажите, как я могу обрабатывать пользователей в моем Content EntityType.

4b9b3361

Ответ 1

Следующий метод OnModelCreating создаст рабочий контекст. Не уверен, что это именно то, что вы хотите.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Content>()
        .HasMany(c => c.Editors)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}

Ответ 2

У меня была та же проблема, и я обнаружил, что я не звонил

 base.OnModelCreating(modelBuilder);

в моем DbModel