程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数?

开发过程中遇到实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数的问题如何解决?下面主要结合日常开发的经验,给出你关于实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数的解决方法建议,希望对你解决实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数有所启发或帮助;

Output screenshot

我创建了实体类来匹配函数列,在上下文类中包含了DbSet,并在存储库中完成了方法,但是使用Fromsql的函数调用不起作用。

代码如下:

  1. sql Server 函数:

     create functION dbo.ufn_vIEwInvoices()
     RETURN table
     AS
         RETURN 
             (SELECT 
                  i.InvoicEID,i.CustomerID,c.Companyname,c.Lastname,a.Streetnumber,a.Streetname,a.City,i.Revenue,i.DateStarted,i.DateCompleted,i.DaysEstimate,i.DaysActual
              FROM 
                  Invoices i,Customers c,Addresses a 
              WHERE 
                  i.CustomerID = c.CustomerID 
                  AND i.WorkAddressID = a.AddressID);
    
  2. 我的实体类匹配函数选择语句中的列:

     public class InvoiceCustomernameAddresses
     {
         [Key] 
         public byte InvoicEID { get; set; }
         public byte CustomerID { get; set; }
         public String Companyname { get; set; }
         public String Lastname { get; set; }
         public String Streetnumber { get; set; }
         public String Stretname { get; set; }
         public String City { get; set; }
         public decimal? Revenue { get; set; }
         public datetiR_308_11845@e? DateStarted { get; set; }
         public datetiR_308_11845@e? DateCompleted { get; set; }
         public byte? DaysEstimate { get; set; }
         public byte? DaysActual { get; set; }
     }
    
  3. DbSet 类中的 DbContext

     public  DbSet<InvoiceCustomernameAddresses> InvoiceCustomernameAddresses { get; set; }
    
  4. 这是存储库中的方法:

     public List<InvoiceCustomernameAddresses> GeTinvoicesUsingTVF()
     {
         List<InvoiceCustomernameAddresses> invoicesList;
    
         try 
         {
             Console.Writeline("InsIDe GeTinvoicesUsingTVF method in repo,about to call function");
    
             invoicesList = context.InvoiceCustomernameAddresses.Fromsql("SELECT * FROM 
                            [dbo].ufn_vIEwInvoices()").ToList();
    
             Console.Writeline("Function called,invoicesList count: " + invoicesList.Count);
         }
         catch (Exception)
         {
             Console.Writeline("In repo's catch,so something went wrong");
             invoicesList = null;
             Console.Writeline("An error occurred");
         }
         return invoicesList;
     }
    
  5. 控制器中的方法:

     [httpGet]
     public List<InvoiceCustomernameAddresses> GetAllinvoicesUsingTVF() 
     {
         List<InvoiceCustomernameAddresses> detailedInvoicesList = null;
         try
         {
             Console.Writeline("InsIDe controller,about to call the repo's geTinvoicesUsingTVF method");
             detailedInvoicesList = invoiceRepository.GeTinvoicesUsingTVF();
             Console.Writeline("Received detailedInvoicesList,count: " + detailedInvoicesList.Count);
         }
         catch (Exception)
         {
             Console.Writeline("In catch block,so something went wrong");
             detailedInvoicesList = null;
         }   
    
         return detailedInvoicesList;
     }
    

请注意:

  • 上面代码中的控制台打印语句,在使用.Fromsql方法调用函数前后:第一个控制台打印输出得到执行,但是函数调用语句执行有一个明显的问题,因为下一个控制台执行的打印输出是 catch 块中的那个。

  • 注意屏幕截图中显示的输出中的“执行 ObjectResult,写入类型为‘null’的值”的行。这反映了 catch 块中的语句:“invoicesList = null”(见附图)。

  • 请注意,此函数调用不使用参数,最后,从 sql Server Management studio 执行此函数可以正常工作。

问题:我错过了什么,.Fromsql 的函数调用不起作用?

解决方法

我发布这个问题是因为一段时间后,显而易见的事情似乎并不那么明显,多一双眼睛可能有助于看到我遗漏了什么。我没有得到异常,但没有得到我期望的数据(附加输出的屏幕截图),因为我有一个拼写错误。实体类中的属性必须与使用 EF 的 FromSql 方法调用的函数中的 SELEct 语句的列名称匹配。因此,无法识别上述实体代码中的“StretName”;它应该是'StreetName'。它现在工作得很好。

大佬总结

以上是大佬教程为你收集整理的实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数全部内容,希望文章能够帮你解决实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。