大佬教程收集整理的这篇文章主要介绍了实体框架的 FromSql 方法执行使用内部连接选择语句的 SQL Server 表值函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Output screenshot
我创建了实体类来匹配函数列,在上下文类中包含了DbSet,并在存储库中完成了方法,但是使用Fromsql的函数调用不起作用。
代码如下:
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);
我的实体类匹配函数选择语句中的列:
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; }
}
DbSet
类中的 DbContext
:
public DbSet<InvoiceCustomernameAddresses> InvoiceCustomernameAddresses { get; set; }
这是存储库中的方法:
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;
}
控制器中的方法:
[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,请注明来意。