Многоконтекстная БД с EntityFramework Core 3 Two Строка подключения - PullRequest
0 голосов
/ 29 октября 2019

Я создаю решение с несколькими проектами ...

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

Все остальные проекты делятсяИдентификационная база данных только для входа в систему и проверки роли пользователя.

В отдельных проектах есть две строки подключения: одна для идентификатора базы данных и одна для конкретной базы данных.

В моей модели есть отношениямежду двумя БД ... например: я назначаю значок для пользователя, информация о значке находится в 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 (результат задачи)

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