2016-07-22 72 views
0

我有一个EF Code First和MSSQL用户定义函数有趣的问题。 我写了一个数据库函数,它返回一个标量值,我想将该函数映射到我的DbContext。实体框架代码第一个函数

基于信息,我发现我写这个:

[DbFunction("AppDbContext", "GetNextDocumentNumber")] 
public virtual int GetNextDocumentNumber() 
{ 
    return ((IObjectContextAdapter)this) 
     .ObjectContext 
     .ExecuteStoreCommand("GetNextDocumentNumber"); 
} 

我也写一个简单的单元测试,以检查是否函数返回正确的值。 问题是,上面的代码返回-1。当我在SMSS上执行功能时,我会得到正确的结果。

在不同的网站上进行搜索后,我找到了解决办法thatlooks这样的:

public virtual int GetNextDocumentNumber() 
{ 
    return this.Database 
     .SqlQuery<int>("select dbo.GetNextDocumentNumber()") 
     .Single(); 
} 

在这种情况下,我得到正确的值。

我只想知道以前的代码有什么问题,或者我做错了什么。在这两种情况下,我都会获得价值。但只有在一种情况下,值才是正确的。

回答

0

This可能会提供您需要的答案。

+0

谢谢!在LINQ表达式中调用函数解决了我的问题。 – TomAsh