除了透過 EF 直接以 SQL 呼叫 Function 的方式外
也可以直接透過 LINQ 讓 EF 自動呼叫自定義的 SQL Function
註:
EF 6 版,要用 DbFunction
EF 5 版,要用 EdmFunction
參考文章:MSDN
1.建立相關的 Table:DT
2.建立 SQL Function
功用是把 dt 欄位格式轉成 yyyyMMdd 的格式
function name:ConvertToYYYYMMDD
3.在專案內建立 ADO.NET 實體資料模型
將 Table、Function 都加進來
4.擴充 DbContext 類別
新增類別,名稱不要與 EF 產生的重複,這邊使用 EFFunction.cs
內容如下:
using System;
using System.Data.Entity;
namespace ef_function.Models
{
public partial class TestEntities
{
[DbFunction("TestModel.Store", "ConvertToYYYYMMDD")]
public string ConvertToYYYYMMDD(string date)
{
throw new NotSupportedException("Direct calls are not supported.");
}
}
}
TestEntities 是 EF 自動建立的類別
TestModel.Store 是 參考 TestEntities 內的 Schema Namespace
5.執行程式
使用方式必須搭配 LINQ
如果直接存取的話,就會出現上面所定義的 Exception
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TestEntities db = new TestEntities();
List<string> result = db.DT.Select(
d => db.ConvertToYYYYMMDD(d.date)).ToList();
foreach (var item in result)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
執行結果如下: