У меня есть проект чата, который ссылается на проект аутентификации. Один из предметов, на который ссылались, был
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;
}
}
}