使用DbFunctions方法而不安装Entity Framework nuget

时间:2018-10-11 08:50:12

标签: asp.net-mvc entity-framework linq-to-entities dbfunctions

我有一个三层ASP.Net Web应用程序。数据层引用了EF,它也包含所有存储库。所以我在那里安装了EF nuget。

然后我有一个服务层,用于在数据层与视图之间来回传输数据。问题是,最近我遇到了一个需要使用DbFunctions.AddDays的需求,但是我不想为单个查询在服务层中安装完整的EF。有什么方法可以在不安装EF的情况下实现相同功能,即是否可以在不使用DbFunctions的情况下实现相同功能?查询是:

Context.Article.Where(p => EntityFunctions.AddDays(p.StartDate, p.Period) > DateTime.Now);

1 个答案:

答案 0 :(得分:1)

  

我们有一个比较日期的特殊方法,该特殊方法驻留在EF dll中。不知道为什么Date.AddDays()不起作用

没有充分的理由。已在EF Core.NET Framework上运行的.NET Core中启用了此功能。 EG:

using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;


namespace EfCoreTest
{

    public class Article
    {
        [Key]
        public int ArticleId { get; set; }
        public string ArticleTitle { get; set; }
        public DateTime StartDate { get; set; }
        public int Period { get; set; }
    }
    public class Db : DbContext
    {
        readonly string connectionString;

        public Db(): this("server=.;database=EfCoreTest;Integrated Security=true")
        {

        }
        public Db(string connectionString)
        {
            this.connectionString = connectionString;
        }
        public DbSet<Article> Articles { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(connectionString);
            base.OnConfiguring(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }



    class Program
    {



        static void Main(string[] args)
        {


            using (var db = new Db())
            {
                db.Database.EnsureDeleted();
                db.Database.EnsureCreated();
                var r = db.Articles.Where(p => p.StartDate.AddDays(p.Period) < DateTime.Now).ToList();

            }

            Console.ReadKey();


        }
    }
}

翻译为

SELECT [p].[ArticleId], [p].[ArticleTitle], [p].[Period], [p].[StartDate]
FROM [Articles] AS [p]
WHERE DATEADD(day, [p].[Period], [p].[StartDate]) < GETDATE()