2017-09-08 8 views
6

मैं एंटीटी फ्रेमवर्क कोर 2.0 से SQL कमांड निष्पादित करना चाहता हूं, लेकिन मैं यह नहीं समझ सकता कि ऐसा कैसे करें।किसी तालिका में सभी डेटा को हटाने के लिए एंटीटी फ्रेमवर्क कोर 2.0 में SQL कमांड निष्पादित करें

1.- मुझे जिस कारण की आवश्यकता है, वह है कि मैं डेटाबेस तालिका से सभी डेटा हटाना चाहता हूं, और Context.remove या Context.removeRange का उपयोग डीबी (तालिका में प्रत्येक डेटा के लिए एक) को कई कॉल का उत्पादन करेगा।

2.- मैंने पढ़ा है कि इसे पूरा करने के लिए .ExecuteSqlCommand विधि है, लेकिन यह विधि मेरे संदर्भ में नहीं है। डाटाबेस (शायद कोर 2.0 में इसे हटा दिया गया था?)। यहां जानकारी का स्रोत दिया गया है: Dropping table In Entity Framework Core and UWP

इसलिए, मूल रूप से मुझे ईएफ कोर 2.0 का उपयोग करके कोड से एक तालिका को हटाने की आवश्यकता है, और जहां तक ​​मुझे पता है, मुझे इसके लिए एक SQL कमांड निष्पादित करने की आवश्यकता है।

धन्यवाद।

यहाँ मेरी .csproj है, अगर मैं कुछ सुनिश्चित करें कि आप संदर्भ Microsoft.EntityFrameworkCore सभी आवश्यक विस्तार तरीकों कि आप कच्चे एसक्यूएल आदेश पर अमल करने की अनुमति होगी शामिल करने के लिए याद कर रहा हूँ

<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> 

उत्तर

6

स्रोत भंडार से मैंने पाया ExecuteSqlCommand और संबंधित विस्तार तरीकों

int count = await context.Database.ExecuteSqlCommandAsync("DELETE FROM [Blogs]"); 

एक लेख है कि ADO.Net का उपयोग कर सुझाव मिले।

सबसे पहले आप संदर्भ से कनेक्शन लेते हैं, कमांड बनाते हैं और इसे निष्पादित करते हैं।

using (var connection = context.Database.GetDbConnection()) { 
    await connection.OpenAsync();  
    using (var command = connection.CreateCommand()) { 
     command.CommandText = "DELETE FROM [Blogs]"; 
     var result = await command.ExecuteNonQueryAsync(); 
    } 
} 
+1

कि संदर्भ पर्याप्त नहीं है। आपको 'Microsoft.EntityFrameworkCore.Relational' को भी संदर्भित करने की आवश्यकता है, जहां 'ExecuteSqlCommand [Async]' परिभाषित किया गया है। – MEMark

-2

आप इस

context.Patients.ToList().ForEach(v => v.ChangeTracker.State = ObjectState.Deleted); 
context.SaveChanges(); 
+0

क्या कोई बता सकता है कि उसने इसे क्यों कम किया? – DanteTheSmith

+1

मुझे नहीं था, लेकिन मुझे लगता है कि क्योंकि आपका समाधान सभी डेटा को हटाने के लिए कई क्वेरी उत्पन्न करेगा, ऑब्जेक्टस्टेट के साथ प्रत्येक इकाई के लिए एक। हटाया गया। इसका एपर्ट, आपका उत्तर उत्तर देता है कि सभी डेटा कैसे हटाएं, लेकिन ईएफ कोर से SQL कमांड को निष्पादित करने का तरीका नहीं है। – MorgoZ

+0

मैंने वोट कम नहीं किया और हाँ यह 'काम' करेगा। लेकिन मैं आपको अनुभव से बता दूंगा कि यदि आपके पास रोगियों को हटाने के लिए बड़ी सूची है, तो यह हमेशा निष्पादित करने के लिए ले सकता है। एसक्यूएल का उपयोग करके थोक डिलीट निष्पादित करना बहुत बेहतर प्रदर्शन करता है। – CaseyC585

0

इस तालिका तरीकों से नष्ट पंक्ति-प्रति-पंक्ति के किसी भी अधिक प्रदर्शन करेंगे कोशिश कर सकते हैं।

context.ExecuteStoreCommand("TRUNCATE TABLE [" + tableName + "]"); 

ExecuteStoreCommand

TRUNCATE TABLE

संबंधित मुद्दे