Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं EntityFramework 7 और Asp.Net 5 का उपयोग करके SQL संग्रहीत कार्यविधि को कैसे कॉल कर सकता हूँ?

मुझे आशा है कि मैं आपकी समस्या को सही ढंग से समझता हूं। आपके पास मौजूदा संग्रहीत प्रक्रिया है, उदाहरण के लिए dbo.spGetSomeData , डेटाबेस में, जो कुछ फ़ील्ड के साथ कुछ आइटम की सूची लौटाता है और आपको वेब API विधि से डेटा प्रदान करने की आवश्यकता होती है।

कार्यान्वयन निम्नलिखित के बारे में हो सकता है। आप एक खाली . परिभाषित कर सकते हैं DbContext जैसे:

public class MyDbContext : DbContext
{
}

और appsettings.json . को परिभाषित करने के लिए डेटाबेस से कनेक्शन स्ट्रिंग के साथ

{
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  }
}

आपको Microsoft.Extensions.DependencyInjection . का उपयोग करना चाहिए MyDbContext जोड़ने के लिए करने के लिए

public class Startup
{
    // property for holding configuration
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
            .AddEnvironmentVariables();
        // save the configuration in Configuration property
        Configuration = builder.Build();
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc()
            .AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            });

        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyDbContext>(options => {
                options.UseSqlServer(Configuration["ConnectionString"]);
            });
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        ...
    }
}

अब आप अपनी WebApi क्रिया को निम्न के रूप में कार्यान्वित कर सकते हैं:

[Route("api/[controller]")]
public class MyController : Controller
{
    public MyDbContext _context { get; set; }

    public MyController([FromServices] MyDbContext context)
    {
        _context = context;
    }

    [HttpGet]
    public async IEnumerable<object> Get()
    {
        var returnObject = new List<dynamic>();

        using (var cmd = _context.Database.GetDbConnection().CreateCommand()) {
            cmd.CommandText = "exec dbo.spGetSomeData";
            cmd.CommandType = CommandType.StoredProcedure;
            // set some parameters of the stored procedure
            cmd.Parameters.Add(new SqlParameter("@someParam",
                SqlDbType.TinyInt) { Value = 1 });

            if (cmd.Connection.State != ConnectionState.Open)
                cmd.Connection.Open();

            var retObject = new List<dynamic>();
            using (var dataReader = await cmd.ExecuteReaderAsync())
            {
                while (await dataReader.ReadAsync())
                {
                    var dataRow = new ExpandoObject() as IDictionary<string, object>;
                    for (var iFiled = 0; iFiled < dataReader.FieldCount; iFiled++) {
                        // one can modify the next line to
                        //   if (dataReader.IsDBNull(iFiled))
                        //       dataRow.Add(dataReader.GetName(iFiled), dataReader[iFiled]);
                        // if one want don't fill the property for NULL
                        // returned from the database
                        dataRow.Add(
                            dataReader.GetName(iFiled),
                            dataReader.IsDBNull(iFiled) ? null : dataReader[iFiled] // use null instead of {}
                        );
                    }

                    retObject.Add((ExpandoObject)dataRow);
                }
            }
            return retObject;
        }
    }
}

उपरोक्त कोड बस exec dbo.spGetSomeData . का उपयोग करके निष्पादित करें और सभी परिणामों को पढ़ने और वहां dynamic . में सहेजने के लिए dataRader का उपयोग करें वस्तु। अगर आप $.ajax api/My . से कॉल करें आपको dbo.spGetSomeData . से लौटाया गया डेटा मिलेगा , जिसे आप सीधे जावास्क्रिप्ट कोड में उपयोग कर सकते हैं। उपरोक्त कोड बहुत पारदर्शी है। डेटासेट से फ़ील्ड के नाम dbo.spGetSomeData . द्वारा लौटाए गए हैं जावास्क्रिप्ट कोड में गुणों के नाम होंगे। आपको किसी भी तरह से अपने C# कोड में किसी भी इकाई वर्ग को प्रबंधित करने की आवश्यकता नहीं है। आपके सी # कोड में संग्रहीत प्रक्रिया से लौटाए गए फ़ील्ड का कोई नाम नहीं है। इस प्रकार यदि आप dbo.spGetSomeData . के कोड को बढ़ा/बदलेंगे/बदलेंगे (कुछ फ़ील्ड का नाम बदलें, नए फ़ील्ड जोड़ें) आपको केवल अपना जावास्क्रिप्ट कोड समायोजित करने की आवश्यकता होगी, लेकिन कोई C# कोड नहीं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2012 और 2014 ऑनलाइन अनुक्रमणिका पुनर्निर्माण समस्या के लिए फ़िक्सेस

  2. SQL में गुणन कुल ऑपरेटर

  3. SQL सर्वर - SQL सर्वर / T-SQL ट्यूटोरियल भाग 38 में GUI का उपयोग करके कॉलम कैसे बदलें या स्क्रिप्ट बदलें

  4. SQL सर्वर के आधुनिक संस्करण में अपग्रेड करने के लिए परफेक्ट स्टॉर्म

  5. SQL सर्वर:sql क्वेरी का उपयोग करके तालिका प्राथमिक कुंजी प्राप्त करें