Использование нескольких EF Core DbContexts в одном приложении в чистой архитектуреC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование нескольких EF Core DbContexts в одном приложении в чистой архитектуре

Сообщение Anonymous »

Я хочу использовать 2 DbContext, но в моем репозитории появилось исключение
В исключении я получил следующее:
"ex = {"Задача была отменена."}"
ChangeTracker = «Context.ChangeTracker» выдал исключение типа «System.ObjectDisposeException».
Спасибо за помощь
настройка приложения:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"HisClinicConnection": "Data Source=mldhsp24;Initial Catalog=HisClinic;Persist Security Info=True;TrustServerCertificate=True;User ID=******;Password=*******",
"TaaminDbConnection": "Data Source=mldhsp24;Initial Catalog=TaminSend;Persist Security Info=True;TrustServerCertificate=True;User ID=********;Password=*******"
}
}

program.cs
using MiladTaamin.Data.Context;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using MiladTaamin.Ioc;

var builder = WebApplication.CreateBuilder(args);
// Add DbContext
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("TaaminDbConnection")));
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("HisClinicConnection")));

builder.Services.AddDependencies();

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
// Add Swagger
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Taamin", Version = "v1", Description = "Milad Taamin Api Services - 2024 " });

// Include the XML comments from your controllers
});
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();

app.MapControllers();

app.Run();

Контейнер зависимостей:
using Microsoft.Extensions.DependencyInjection;
using MiladTaamin.Application.Services.Implementations;
using MiladTaamin.Application.Services.Interfaces;
using MiladTaamin.Data.Repositories.Taamin;
using MiladTaamin.Domain.Interfaces;
using MiladTaamin.Domain.Interfaces.Taamin;
using MiladTamin.Data.Repositories;
using MiladTamin.Domain.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MiladTaamin.Ioc
{
public static class DependencyContainer
{
public static void AddDependencies(this IServiceCollection services)
{
services.AddScoped(typeof(IRepository), typeof(Repository));
services.AddScoped(typeof(IHisClinicGenericRepository), typeof(Repository));
services.AddScoped();
services.AddScoped();
services.AddScoped();
}
}
}

Первый контекст базы данных:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MiladTaamin.Domain.Entities.Taamin;
using MiladTaamin.Domain.Entities;
using System;

namespace MiladTaamin.Data.Context
{
public class MiladTaaminDbContext : DbContext
{

public MiladTaaminDbContext(DbContextOptions options): base(options){}

public DbSet TaminResults { get; set; }

}
}

Второй контекст базы данных:
using Microsoft.EntityFrameworkCore;
using MiladTaamin.Domain.Entities.HisClinic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MiladTaamin.Data.Context
{
public class HisClinicDbContext: DbContext
{
public HisClinicDbContext(DbContextOptions options): base(options){ }
public DbSet TemporaryReception { get; set; }
public DbSet ReceptionStatus { get; set; }
}
}

Репозиторий:
using Microsoft.EntityFrameworkCore;
using MiladTaamin.Data.Context;
using MiladTaamin.Domain.Entities.HisClinic;
using MiladTaamin.Domain.Entities.Taamin;
using MiladTaamin.Domain.Enums;
using MiladTaamin.Domain.Interfaces.Taamin;
using MiladTamin.Data.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MiladTaamin.Data.Repositories.Taamin
{
public class HisClinicRepository : HisClinicGenericRepository, IHisClinicRepository
{
public HisClinicRepository(HisClinicDbContext context) : base(context) { }

public async Task GetSuccessTemporaryReception(ExcelType type, string Date)
{
try
{

var result = await Context.TemporaryReception.FirstOrDefaultAsync(x => x.Id.Equals(10004));

return result;
}
catch (Exception ex)
{

throw;
}

}
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... chitecture
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»