EF架構~讓mysql支持DbFunctions擴展函數


回到目錄

對於在Linq To Entity里使用日期函數需要DbFunctions里的擴展方法,而不能使用.net里的日期函數,因為linq的代碼會被翻譯成SQL發到數據庫端,如你的.net方法對於數據庫是不知道的,所以需要使用DbFunctions里的函數,它是為sqlserver設計的,而如果你的數據源是mysql,那你就尷尬了,我開始以為Mysql.Data里集成了這些擴展函數,可遺憾的是沒有集成,所以我們需要使用其它解決方案。

DbFunctions里的數據庫函數

支持MySql的解決方案

在mysql里添加對象的自函數函數

BEGIN
    #返回兩個日期相差月份數
  RETURN  PERIOD_DIFF(DATE_FORMAT(`to`,'%Y%m'),DATE_FORMAT(`from`,'%Y%m'));
END

然后在linq里使用DbFunctions就可以OK了,不會出現未定義函數的問題了

     var result =repository.GetModel(
                  i => DbFunctions.DiffMonths(i.CreateDate, DateTime.Now) > 1)
          .Take(20)
          .ToList();

然后程序可以正常使用了,感謝各位的閱讀!

回到目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM