База данных Asp.net IDentity 2 Сначала AspNetUserLogins не имеет определенного ключа - PullRequest
0 голосов
/ 22 января 2019

Я использую базу данных сначала с идентификатором asp.net 2, теперь в моем проекте asp.net mvc у меня есть два datacontext, один для идентификации и другой для моей существующей базы данных. У меня есть таблица в моей существующей базе данных под названием Client, и я не хочу создавать отношения один-ко-многим с AspNetUsers. мне так нравится

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 string Code { get; set; }
    public int? ClientId { get; set; }
    public virtual Client Client { get; set; }
}

и это моё ApplicationDbContext

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

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

и это мой Myappcontext

public partial class Myappcontext: DbContext
{
    public Myappcontext()
        : base("name=Myappcontext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<C__MigrationHistory> C__MigrationHistory { get; set; }
    public virtual DbSet<AspNetRoles> AspNetRoles { get; set; }
    public virtual DbSet<AspNetUserClaims> AspNetUserClaims { get; set; }
    public virtual DbSet<AspNetUserLogins> AspNetUserLogins { get; set; }
    public virtual DbSet<AspNetUsers> AspNetUsers { get; set; }
    public virtual DbSet<Client> Client { get; set; }
    public virtual DbSet<products> products { get; set; }
    public virtual DbSet<sysdiagrams> sysdiagrams { get; set; }
}

когда я запускаю приложение и ввожу свой адрес электронной почты и пароль для подключения, я получаю эту ошибку

 EntityType 'AspNetUserLogins' has no key defined. Define the key for     this EntityType.
AspNetUserLogins: EntityType: EntitySet 'AspNetUserLogins' is based on type 'AspNetUserLogins' that has no keys defined.

Сейчас я не знаю, как решить эту проблему, потому что я не нашел руководства, как создать отношение, когда мы сначала используем базу данных и идентичность 2

и я извиняюсь за плохой язык

1 Ответ

0 голосов
/ 22 января 2019

После 2 дней поиска я не нашел решений для моей проблемы, потому что я новичок в идентификации asp.net и ef6, я решил создать один DbContext для идентификатора пут и моей базы данных и сначала использовать код для воссоздания моей базы данных.как это:

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 string Code { get; set; }
    public int? ClientId { get; set; }
    public virtual Client Client { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
    : base("DefaultConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext,Migrations.Configuration>());
    }
    public DbSet<Client> Clients { get; set; }

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

я не знаю, является ли это лучшим методом для работы, но у меня нет выбора до сих пор

...