Je souhaite exécuter une commande SQL à partir d'Entity Framework Core 2.0, mais je ne vois pas comment faire.
1.- La raison pour laquelle je dois, est que je veux supprimer toutes les données d'une table de base de données, et utiliser Context.remove
ou Context.removeRange
produirait de nombreux appels à DB (un pour chaque donnée de la table).
2.- J'ai lu qu'il existe une méthode .ExecuteSqlCommand
pour accomplir cela, mais cette méthode n'est pas présente dans mon Context.Database (peut-être que dans Core 2.0 elle a été supprimée?). Voici la source de l'info: Suppression de la table dans Entity Framework Core et UWP
Donc, en gros, je dois supprimer une table du code en utilisant EF Core 2.0 et, autant que je sache, je dois exécuter une commande SQL pour cela.
Je vous remercie.
Voici mon .csproj, juste au cas où il me manque quelque chose
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<!--<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" /> -->
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
Assurez-vous de référencer Microsoft.EntityFrameworkCore
pour inclure toutes les méthodes d'extension nécessaires pour vous permettre d'exécuter des commandes SQL brutes.
Dans le référentiel source, j'ai trouvé ExecuteSqlCommand
et les méthodes d'extension associées.
int count = await context.Database.ExecuteSqlCommandAsync("DELETE FROM [Blogs]");
Trouvé un article qui suggérait d'utiliser ADO.Net.
Vous devez d’abord saisir une connexion du contexte, créer une commande et l’exécuter.
using (var connection = context.Database.GetDbConnection()) {
await connection.OpenAsync();
using (var command = connection.CreateCommand()) {
command.CommandText = "DELETE FROM [Blogs]";
var result = await command.ExecuteNonQueryAsync();
}
}
Cela s'exécutera sur n'importe quelle méthode de suppression ligne par ligne des méthodes de table.
context.ExecuteStoreCommand("TRUNCATE TABLE [" + tableName + "]");
TRUNCATE TABLE est similaire à l'instruction DELETE sans WHERE clause; Cependant, TRUNCATE TABLE est plus rapide et utilise moins de système et ressources du journal des transactions.
Context.Database.ExecuteSqlCommand
et Context.Database.ExecuteSqlCommandAsync
sont disponibles dans l'espace de noms Microsoft.EntityFrameworkCore.Relational
. Assurez-vous d'avoir sa référence.
Ensuite, il sera disponible dans votre classe et vous pourrez l'appeler comme ci-dessous,
Context.ExecuteSqlCommand("TRUNCATE TABLE YOURTABLENAME");