Я создаю решение с несколькими проектами ...
В проекте я управляю пользователями с идентификацией и базой данных, которую я хотел бы изолировать.
Все остальные проекты делятсяИдентификационная база данных только для входа в систему и проверки роли пользователя.
В отдельных проектах есть две строки подключения: одна для идентификатора базы данных и одна для конкретной базы данных.
В моей модели есть отношениямежду двумя БД ... например: я назначаю значок для пользователя, информация о значке находится в db-значке, а информация о пользователе находится в db-идентичности.
Мне нужно связать в модели для конкретногоТаблица проекта в двух дБ.
Моя модель
public class Assignment
{
public int Id { get; set; }
public int IdUser { get; set; }
public User User { get; set; }
public int IdBadge { get; set; }
public Badge Badge { get; set; }
public DateTime DataStart { get; set; }
public DateTime DataEnd { get; set; }
public string Note { get; set; }
}
public class User : AppUser
{
public ICollection<Assignment> Assignments { get; set; }
}
public class Badge
{
public int Id { get; set; }
public int Number { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
public ICollection<Assignment> Assignments { get; set; }
}
Контекст для идентификации
public class ApplicationDbContext : IdentityDbContext<AppUser, AppRole, int>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<User> users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
modelBuilder.Entity<User>().ToTable("AspNetUsers");
}
// public DbSet<User> users { get; set; }
//protected override void OnModelCreating(ModelBuilder modelBuilder)
//{
// modelBuilder.Entity<User>().ToTable("AspNetUsers");
//}
}
Контекст для проекта
public class ScaDbContext : DbContext
{
// private readonly IConfiguration config;
public ScaDbContext(DbContextOptions<ScaDbContext> options) : base(options)
{
}
// public DbSet<User> users { get; set; }
public DbSet<Badge> badges { get; set; }
public DbSet<Assignment> assignments { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Badge>().ToTable("Badge", "Yogi");
modelBuilder.Entity<Assignment>()
.HasKey(b => new { b.IdBadge, b.IdUser });
modelBuilder.Entity<Assignment>()
.HasOne(bd => bd.Badge)
.WithMany(a => a.Assignments)
.HasForeignKey(bd => bd.IdBadge);
modelBuilder.Entity<Assignment>()
.HasOne(u => u.User)
.WithMany(a => a.Assignments)
.HasForeignKey(u => u.IdUser);
modelBuilder.Entity<Assignment>().ToTable("Assignment", "Yogi");
}
}
Конфигурация вstartup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<AppUser, AppRole>()
.AddDefaultUI()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddDbContext<ScaDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("SCAConnection"))
);
}
Назначение контроллера
public async Task<IActionResult> Index()
{
var scaDbContext = _context.assignments.Include(a => a.Badge).Include(a => a.User);
return View(await scaDbContext.ToListAsync());
}
Я получаю эту ошибку при вызове контроллера
Произошло необработанное исключение при обработке запроса. SqlException: Неверное имя объекта «Пользователь». Microsoft.Data.SqlClient.SqlCommand + <> c.b__164_0 (результат задачи)