В EF Code First, как использовать ApplicationUser UserId в качестве внешнего ключа в пользовательском объекте? - PullRequest
0 голосов
/ 02 декабря 2018

Мой пользовательский объект:

public class Order
    {
        [Key,Column(Order=0)]
        public int OrderId { get; set; }
        //Other properties
        public string UserId { get; set; }
        [ForeignKey("UserId")]
        public virtual ApplicationUser User { get; set; }
     }

Класс ApplicationUser:

public class ApplicationUser : IdentityUser
{
    //one to many relation
    public virtual List<Sandwich.Order>Order { get; set; }

   public async Task<ClaimsIdentity> 
   GenerateUserIdentityAsync(UserManager<ApplicationUser> manager){..}
}

У меня есть два DbContexts (один по умолчанию для AppUser и один, который я создал):

  public class ADbContext : DbContext
{
    public ADbContext() : base("DefaultConnection")
    {
    }

    public DbSet<Toppings> ToppingsDbset { get; set;}
    //I had to comment the line below to in order to work with ToppingDBset but then I can't work with OrderDBSet
    //public DbSet<Order> OrderDbSet { get; set; }

}
//Default AppDbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {

    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

Когда я запускаю его, просто работая с ApplicationDbContext, он работает нормально и создает следующую таблицу со всеми связями. введите описание изображения здесь

Моя проблема: когда я пытаюсь работать с ADbContext без комментариев public DbSet<Order> OrderDbSet { get; set; }

{"Во время обнаружения одной или нескольких ошибок проверкигенерация модели: \ r \ n \ r \ n.IdentityUserLogin:: EntityType 'IdentityUserLogin' не определен ключ. Определите ключ для этого EntityType. \ r \ n.IdentityUserRole:: EntityType 'IdentityUserRole' не определен ключ

Решения, которые я попробовал:

//Adding following method on ADbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    }

Я пытаюсь создать все таблицы в одной базе данных. Я использую EF6.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Решено:

В файле DbContext я добавил OrderDbSet в классе ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Order> OrderDbset { get; set; }

    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {

    }
 }
0 голосов
/ 02 декабря 2018

попробуйте это в OnModelCreating (DbModelBuilder modelBuilder):

modelBuilder.Entity () .HasMany (c => c.Order) .WithOne (e => e.ApplicationUser);

refrence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...