C# EF框架调用数据库的函数

1.在数据库中创建一个自定义函数:

复制代码
REATE FUNCTION [dbo].[f_IsOriginsDisabled]
(
    @origins varchar(50),
    @needPPTV bit
)
RETURNS bit
AS
BEGIN
    if @origins=''
    begin
     RETURN 1;
    end
    
    declare @disables varchar(50);
    set @disables='';
    
    if @needPPTV=0
    begin
     set @disables = @disables + ',6';
    end
    
    select @disables = @disables + ',' + CAST(Id AS varchar(50)) + ','  from Video_Origin
    where IsDel=0 and IsEnabled=0
    
DECLARE @ix int, @pos int, @str varchar(1000);
SET @pos = 1;
SET @ix = 1;

WHILE @ix > 0 
BEGIN
    SET @ix = charindex(',', @origins, @pos) 
    IF @ix > 0
        SET @str = substring(@origins, @pos, @ix - @pos);
    ELSE
        SET @str = substring(@origins, @pos, len(@origins));
    SET @str = ltrim(rtrim(@str));
    if charindex(','+@str+',',@disables)<=0
     return 0;
    SET @pos = @ix + 1;
END 
    
    RETURN 1;

END

GO
复制代码

2.创建EF的数据库上下文:

引用 EntityFramework.Functions程序集

复制代码
    public class MediaDBContext : DbContext, IDisposable
    {
       
        public MediaDBContext() : base("MediaDBContext") { }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Add(new FunctionConvention<MediaDBContext>());
        }

 /// <summary>
        /// 判断当前源是否全部失效
        /// </summary>
        /// <param name="origins">视频源</param>
        /// <param name="needPPTV">是否需要PPTV源</param>
        /// <returns></returns>
        [Function(FunctionType.ComposableScalarValuedFunction, "f_IsOriginsDisabled", Schema = "dbo")]
        [return: Parameter(DbType = "bit")]
        public bool IsOriginsDisabled([Parameter(DbType = "varchar")]string origins, [Parameter(DbType = "bit")]bool needPPTV)
        {
            return Function.CallNotSupported<bool>();
        }
}
复制代码

3.调用方式:

1
var query = context.Movies .Where(m => !context.IsOriginsDisabled(m.Origins, hasPPTV);

上面步骤已经使用EF调用数据库的函数了。

4.详细介绍EF怎样调用数据库中的存储过程与函数文档说明:

https://weblogs.asp.net/dixin/entityframework.functions  

 

posted @   大空白纸  阅读(5930)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-04-08 .net 加密与解密
2015-04-08 asp.net mvc4 Json问题
点击右上角即可分享
微信分享提示