Ошибка при создании базы
Класс контроллера:
private readonly ILogger<HomeController> _logger;
IShopRepository shop;
public HomeController(ILogger<HomeController> logger , IShopRepository shopcont )
{
this.shop = shopcont;
_logger = logger;
}
ShopContext:
public class ShopContext : DbContext
{
public ShopContext(DbContextOptions<ShopContext> options)
: base(options)
{
Database.EnsureCreated();
}
}
ShopInject:
public interface IShopRepository
{
///код
}
public class ShopInject : IShopRepository
{
ShopContext shop;
public ShopInject(ShopContext shopcont)
{
this.shop = shopcont;
}
}
ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
string connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<ShopContext>(options =>
options.UseSqlServer(connection, builder =>
{
builder.EnableRetryOnFailure();
}));
services.AddSingleton<IShopRepository, ShopInject>();
services.AddMemoryCache();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddReact();
services.AddJsEngineSwitcher(options => options.DefaultEngineName = ChakraCoreJsEngine.EngineName).AddChakraCore();
}
При запуске приложения получаю ошибку:
InvalidOperationException: Cannot consume scoped service 'Shop.Models.ShopContext' from singleton 'Shop.Containers.IShopRepository.
Подскажите, пожалуйста, как исправить?
Спасибо, я заменил
services.AddSingleton<IShopRepository, ShopInject>();
на
services.AddTransient<IShopRepository, ShopInject>();
И ошибка ушла . Но дальше я добавил такие строчки для заполнения базы:
public ShopInject(ShopContext shopcont)
{
this.shop = shopcont;
if (!this.shop.Products.Any())
{
this.shop.Products.AddRange(
new Product
{
Count = 20,
Name = "Спрайт",
Price = 15,
Image = "/images/Спрайт.png"
}
);
this.shop.SaveChanges();
}
}
И при создании базы добавляемая строка дублируется. Не подскажете с чем это может быть связано?