详述Entity Framework自定义分页效果实现方法


当前第2页 返回上一页

1

2

3

4

5

6

7

public class LogRepository : AbstractRepository<Log, int>

  {

    public LogRepository(EFContext context)

      : base(context)

    {

    }

  }

关于Entity的生成

本人比较喜欢Database First 实现,先设计数据库,然后用edmx reverse engineering,生成POCO。可以参考Entity目录下的相关文件。

当然,如果你喜欢Code First,同样没有问题,仍然适用本文的实现。

使用Logging日志追踪EF SQL

在使用Entity Framework的时候,最好关心一下EF所生成的SQL,这样可以在开发阶段发现一些潜在的性能问题,避免在生产环境焦头烂额:)

在Common\EFContext.cs 里,有一个配置项EnableTraceSql,如果为true,那么所以EF生成的SQL将会被nlog记录下来。我将nlog的日志配置到了数据库。也就是说,在你运行示例项目时,每次查询,都会增加新的日志记录,内容为查询时生成的SQL:

Specification Pattern

在查询方法里,有个重载是接受一个ISpecification示例,这样的实现可以有效的控制业务逻辑,对于写给被其他人调用的接口来说,可以明确的确定查询参数,例如:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public class LogSearchSpecification : ISpecification<Log>

  {

    public string LevelName { get; set; }

    public string Message { get; set; }

    public Expression<Func<Log, bool>> ToExpression()

    {

      return log => (log.Level.Name == LevelName || LevelName == "") &&

             (log.Message.Contains(Message) || Message == "");

    }

 

    public bool IsSatisfiedBy(Log entity)

    {

      return (entity.Level.Name == LevelName || LevelName == "") &&

          (entity.Message.Contains(Message) || Message == "");

    }

  }

那么,调用这个查询方法的代码就可以明确知道,我的查询条件为LevelName和Message,至于LevelName是等于以及Message为Like则是在LogSearchSpeficiation里实现,做到很好的封装。

最后

这套实现是几年来平时慢慢积累的,是经过实践的,所以应该可以作为一定的参考,当然,在具体的项目里,可以用一些DI去拿到Repository等等,不在本文讨论范围,大家可以自由发挥,希望对大家可以有所帮助,谢谢。

以上就是详述Entity Framework自定义分页效果实现方法的详细内容!

返回前面的内容

相关阅读 >>

c#中自定义控件如何实现textbox禁止粘贴的示例代码

net framework重要吗

.net framework有什么用

visual studio 中自定义生成事件的详细介绍

entity framework自定义分页效果的实现教程

使用c#实现发送自定义的html格式邮件的代码案例

.net core中如何使用entity framework操作postgresql?

详细分析.net?core?以及与?.net?framework的关系(图)

如何使用c#自定义音乐播放器进度条的实例分析

net framework 4.0安装未成功原因是hresult...怎么办

更多相关阅读请进入《framework》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...