数据库第一个LINQ到EF6函数可以工作。选择但不能单独使用

时间:2015-10-15 22:40:12

标签: c# entity-framework linq

我使用的是数据库优先的EF6模型,其中包含一些标量值函数,而我遇到的问题与我预期的方式不一致。 SQL函数定义为:

dbo.GetCurrentPayOffAmountFunction(@ApplicationID int, @PayOffDate DateTime)
Returns decimal(18,2)

在.edmx中,我使用:

    <Function Name="GetCurrentPayOffAmountFunction" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo" ReturnType="decimal">
      <Parameter Name="ApplicationID" Type="int" Mode="In" />
      <Parameter Name="PayOffDate" Type="datetime" Mode="In" />
    </Function>

在EF项目的.cs中:

    [DbFunction("PHXModel.Store", "GetCurrentPayOffAmountFunction")]
    public decimal GetCurrentPayOffAmountFunction(int ApplicationID, DateTime PayOffDate)
    {
        var objectContext = ((IObjectContextAdapter)this).ObjectContext;

        var parameters = new List<ObjectParameter>();
        parameters.Add(new ObjectParameter("ApplicationID", ApplicationID));
        parameters.Add(new ObjectParameter("PayOffDate", PayOffDate));

        return Convert.ToDecimal(objectContext.CreateQuery<string>("PHXModel.Store.GetCurrentPayOffAmountFunction(@ApplicationID, @PayOffDate)", parameters.ToArray())
             .Execute(MergeOption.NoTracking)
             .FirstOrDefault());
    }

现在,当我将其称为select的一部分时,这一切都正常,如下:

decimal app = db.Applications.Take(1).Select (a => db.GetCurrentPayOffAmountFunction(1000, DateTime.Now)).FirstOrDefault();

(&#34;上面的应用程序&#34;可以是我数据库中的任何表格,无论我在选择的左边实际使用了什么,该函数都会返回正确的值。)

但是,当我尝试在没有查询之前运行该函数时,例如:

decimal payoffAmount = db.GetCurrentPayOffAmountFunction(1000, DateTime.Now);

我总是收到错误:

  

InvalidOperationException:来自实体化的指定强制转换   &#39; System.Decimal&#39;输入&#39; System.String&#39;类型无效。

现在,我可以使用第一种方法来获取我的值并且它工作正常,但是我觉得错误的是获得一个随机项目,所以我可以调用我的函数。有没有人见过这个?我在这里做错了什么?

0 个答案:

没有答案