@alexxxey_code

Как убрать эту ошибку?

пример из книги по ef core не могу ни как реализовать.608977937c891650596838.png
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using WA.Models;

namespace WA.Controllers
{
   public class SeedController : Controller {
        private DataContext context;

        public SeedController(DataContext ctx) => context = ctx;

        public IActionResult Index() {
            ViewBag.Count = context.Products.Count();
            return View(context.Products
                .Include(p => p.Category).OrderBy(p => p.Id).Take(20));
        }
            
        [HttpPost]
        public IActionResult CreateSeedData(int count) {
            ClearData();
            if (count > 0) {
                context.Database.SetCommandTimeout(System.TimeSpan.FromMinutes(10));
                context.Database
                    .ExecuteSqlCommand("DROP PROCEDURE IF EXISTS CreateSeedData");
                context.Database.ExecuteSqlCommand($@"
                    CREATE PROCEDURE CreateSeedData
	                    @RowCount decimal
                    AS
	                  BEGIN
	                  SET NOCOUNT ON
                      DECLARE @i INT = 1;
	                  DECLARE @catId BIGINT;
	                  DECLARE @CatCount INT = @RowCount / 10;
	                  DECLARE @pprice DECIMAL(5,2);
	                  DECLARE @rprice DECIMAL(5,2);
	                  BEGIN TRANSACTION
		                WHILE @i <= @CatCount
			              BEGIN
				            INSERT INTO Categories (Name, Description)
				            VALUES (CONCAT('Category-', @i), 
                                             'Test Data Category');
				            SET @catId = SCOPE_IDENTITY();
				            DECLARE @j INT = 1;
				            WHILE @j <= 10
					        BEGIN
						   SET @pprice = RAND()*(500-5+1);
						   SET @rprice = (RAND() * @pprice) 
                                                   + @pprice;
						   INSERT INTO Products (Name, CategoryId, 
                                                    PurchasePrice, RetailPrice)
						   VALUES (CONCAT('Product', @i, '-', @j), 
                                                 @catId, @pprice, @rprice)
						   SET @j = @j + 1
					          END
		                    SET @i = @i + 1
		                    END
	                    COMMIT
                    END");
                context.Database.BeginTransaction();
                context.Database
                    .ExecuteSqlCommand($"EXEC CreateSeedData @RowCount = {count}");
                context.Database.CommitTransaction();
            }
            return RedirectToAction(nameof(Index));
        }

        [HttpPost]
        public IActionResult ClearData() {
            context.Database.SetCommandTimeout(System.TimeSpan.FromMinutes(10));
            context.Database.BeginTransaction();
            context.Database.ExecuteSqlCommand("DELETE FROM Orders");
            context.Database.ExecuteSqlCommand("DELETE FROM Categories");
            context.Database.CommitTransaction();
            return RedirectToAction(nameof(Index));
        }
    }
}
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Смотрите используемую версию EF. В пятой версии такого метода расширения нет. Учитесь пользоваться официальной документацией. Вот описание DatabaseFacade. https://docs.microsoft.com/ru-ru/dotnet/api/micros...
И как видим ExecuteSqlCommand там нет ни в методах класса, ни в методах расширения, что говорит https://docs.microsoft.com/ru-ru/dotnet/api/micros..., что метод является устаревшим.

и там же
For the execution of SQL queries using plain strings, use ExecuteSqlRaw instead. For the execution of SQL queries using interpolated string syntax to create parameters, use ExecuteSqlInterpolated instead.
Ответ написан
Комментировать
AVollane
@AVollane
Начинающий C# разработчик
Здравствуйте. Сейчас перечитал документацию по классу DataContext и не нашёл там свойства Database, которое вы видимо пытаетесь использовать. В документации указано, что на объекте класса DataContext можно вызвать метод ExecuteCommand, который выполняет команды SQL непосредственно к базе данных. Попробуйте использовать его. Напишите, получилось или нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы