Модель ASP.NET Core 2.1 продолжает пытаться создать таблицу ApplicationUsers в БД при запуске миграции - PullRequest
0 голосов
/ 23 января 2019

У меня есть проект чата, который ссылается на проект аутентификации. Один из предметов, на который ссылались, был

AuthProject.Data.Models;

, который содержит класс ApplicationUsers. Эта таблица уже была создана в базе данных и в модели "ChatParticipant", я хочу сделать ссылку / внешний ключ к этой таблице с ParticipantId.

public class ChatParticipant
{
    public string Id { get; set; }
    public string SessionId { get; set; }
    public ChatSession Session { get; set; }
    public string ParticipantId { get; set; }
    public virtual ApplicationUsers Participant { get; set; }
}

Однако, когда я запускаю миграцию, происходит то, что создается новая таблица ApplicationUsers вместо ссылки на старую. Это приложение использует ту же базу данных, что и проект Auth.

Как я могу предотвратить создание ApplicationUsers?

Startup.cs определение dbContext

services.AddDbContext<AuthProjectDbContext>(options => options.UseSqlServer(Configuration["DatabaseConfiguration:ConnectionString"]));
services.AddDbContext<ChatSampleDbContext>(options => options.UseSqlServer(Configuration["DatabaseConfiguration:ConnectionString"]));

ChatSampleDbContext:

public ChatSampleDbContext(DbContextOptions<ChatSampleDbContext> options) : base(options) {

}
UniqueKeyGenerator uniqueKeyGenerator = new UniqueKeyGenerator();
public DbSet<ChatMessage> ChatMessage { get; set; }
public DbSet<ChatParticipant> ChatParticipant { get; set; }
public DbSet<ChatSession> ChatSession { get; set; }


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    IConfigurationRoot configuration = new ConfigurationBuilder()
    .SetBasePath(ConfigurationManager.GetBasePath(Environment.GetEnvironmentVariable("CENTRAL_APPLICATION_SETTINGS")))
    .AddJsonFile("cssettings.json")
    .Build();
    modelBuilder.HasDefaultSchema(schema: configuration["DatabaseSchemas:ChatSample"]);
    base.OnModelCreating(modelBuilder);
}

public override int SaveChanges()
{
    Audit();
    return base.SaveChanges();
}

public async Task<int> SaveChangesAsync()
{
    Audit();
    return await base.SaveChangesAsync();
}

private void Audit()
{
    var entries = ChangeTracker.Entries().Where(x => x.Entity is ChatSession && (x.State == EntityState.Added || x.State == EntityState.Modified));
    foreach (var entry in entries)
    {
        if (entry.State == EntityState.Added)
        {
            ((ChatSession)entry.Entity).CreatedOn = DateTime.UtcNow;
        }
    ((ChatSession)entry.Entity).CreatedOn = DateTime.UtcNow;
    }
}

AuthProject DbContext:

public class AuthProjectDbContext : DbContext
{
    public AuthProjectDbContext(DbContextOptions<AuthProjectDbContext> options) : base(options) {

    }
    public DbSet<ApplicationUsers> ApplicationUsers { get; set; }
    public DbSet<UserRoles> UserRoles { get; set; }
    UniqueKeyGenerator uniqueKeyGenerator = new UniqueKeyGenerator();


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {

        IConfigurationRoot configuration = new ConfigurationBuilder()
        .SetBasePath(ConfigurationManager.GetBasePath(Environment.GetEnvironmentVariable("CAS")))
        .AddJsonFile("mssettings.json")
        .Build();
        modelBuilder.HasDefaultSchema(schema: configuration["DatabaseSchemas:AuthProject"]);
        base.OnModelCreating(modelBuilder);
    }

    public override int SaveChanges()
    {
        Audit();
        return base.SaveChanges();
    }

    public async Task<int> SaveChangesAsync()
    {
        Audit();
        return await base.SaveChangesAsync();
    }

    private void Audit()
    {
        var entries = ChangeTracker.Entries().Where(x => x.Entity is ApplicationUsers && (x.State == EntityState.Added || x.State == EntityState.Modified));
        foreach (var entry in entries)
        {
            if (entry.State == EntityState.Added)
            {
                ((ApplicationUsers)entry.Entity).CreatedOn = DateTime.UtcNow;
            }
        ((ApplicationUsers)entry.Entity).UpdatedOn = DateTime.UtcNow;
        }
    }
}
...