Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
418 views
in Technique[技术] by (71.8m points)

c# - Entity Framework Code-First Execute Scalar-Valued Functions

How can I execute a scalar function using code first? Below is what I have tried but only the query itself is being returned, not the return value.

using (var dbContext = new FTTRContext())
        {

            queryResult =
                dbContext.Database.SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())").ToString();
        }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

SqlQuery returns an instance of DbRawSqlQuery. This class is an enumerable and it expects you to enumerate it via either the standard LINQ operators, or via foreach, etc. .ToString() on this object simply returns the query that will be executed. To get the result you want, use .Single() or .SingleAsync().

queryResult = dbContext.Database
    .SqlQuery<string>("SELECT [dbo].[ufnGetTotalUsers] (GETDATE())")
    .Single();

This should return the scalar string result you are looking for.

That being said, your query looks like invalid SQL. Are you just trying to just get the date from SQL Server? If so, the query should probably be SELECT GETDATE(). Once you do that, you might have to use .SqlQuery<DateTime>() since the type of that value is not a string.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...