EF: Как использовать БД в нескольких проектах в одном решении? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть три проекта:

  1. один, содержащий все модели
  2. один, содержащий контроллеры для моего веб-интерфейса
  3. один, содержащий контроллеры для моего клиентского интерфейса

Я создал базу данных для проекта (1), используя структуру сущностей (enable-migrations, add-migration, update-database). Затем я запускаю проект (2), чтобы создать новый элемент и сохранить его в ранее созданной базе данных. Однако вместо использования указанной базы данных она создала новую (идентичную той из (1)) и сохранила элемент там. Когда я запускаю проект (3), я почти уверен, что произойдет то же самое, создав третью идентичную базу данных. Однако, поскольку (3) не может создавать новые элементы, только читать их, ничего не происходит вместо этого. Теперь это явно не то, что я хочу, так как мне нужно использовать элементы, созданные из (2) в (3) (и в идеале сохранить их в базе данных, созданной в (1)), так как я могу добиться, чтобы каждый проект использовалодна и та же база данных?

Строки соединения во всех трех проектах идентичны:

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-db.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Второй проект имеет класс Startup.Auth.cs, чего нет у других. Поскольку я не уверен, что это как-то связано с этим, вот часть этого:

public partial class Startup
    {
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context, user manager and signin manager to use a single instance per request
            app.CreatePerOwinContext(MyContext2.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

А вот часть проекта (1), где я создаю контекст. В других проектах этого нет:

public class MyContext2 : IdentityDbContext<ApplicationUser>
    {
        public MyContext2()
            : base("DefaultConnection")
        {
        }

        public DbSet<Items> items { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        }
    }

Intellisense работает нормально, он автоматически заполняет db.items, как и полагается, поэтому ссылки устанавливаются. Я звоню в базу данных через private MyContext2 db = new Context().

Я не могу заставить ее работать, независимо от того, что я пытаюсь, любая помощь очень ценится!

...