LINQ To Entities“无法为可组合函数创建函数导入”

时间:2013-03-28 12:43:46

标签: entity-framework linq-to-entities

我的SQL Server中有一个标量值函数,它根据文本条目(varchar(max))返回ID (int),使用的函数返回某个序列号的产品SKU ID。

这是SQL函数。

CREATE function [dbo].[fGetPSKU]
(
  @SerialNumber varchar(MAX)
)
returns int
begin

  /*
    local variables  
  */
  declare cmodel cursor local for
    select PSKU.ProductSKUID, PSKU.ProductSKUValadationStart, PSKU.ProductSKUValadationEnd, PSKU.ProductSKUValadationMask, PSKU.PruductSKUValadationLength
      from SCM.dbo.ProductSKU PSKU
      where PSKU.ProductSKUActive = 0
        and PSKU.ProductSKURequiresValadation = 1
      order by PSKU.ProductSKUValadationEnd - PSKU.ProductSKUValadationStart desc, len(PSKU.ProductSKUValadationMask) desc, PSKU.ProductSKUDateCreated desc, PSKU.ProductSKUID desc
  declare @mid int
  declare @mstart int
  declare @mend int
  declare @masks varchar(max)
  declare @lengths varchar(255)
  declare @found int
  declare @model int

  /* 
    main code 
  */
  set @found = 0
  set @model = -1

  open cmodel

  fetch next from cmodel into @mid, @mstart, @mend, @masks, @lengths

  while @@fetch_status = 0 and @found = 0
  begin

    if exists
      (
        select null
          from SCM..fParseDelimited(@masks, ',')
          where ids = substring(@SerialNumber, @mstart, @mend - @mstart + 1)
      )
      and exists
      (
        select null
          from SCM..fParseDelimited(@lengths, ',')
          where ids = convert(varchar, len(@SerialNumber))
      )
    begin
      set @found = 1
      set @model = @mid

    end

    fetch next from cmodel into @mid, @mstart, @mend, @masks, @lengths

  end

  close cmodel

  return @model

end

在我的实体框架上导入后,我收到以下错误:在尝试创建函数导入时,无法为可组合函数创建函数。我已经阅读了类似的 post 但是,在EF中创建函数的位置和内容并不是很清楚,以便成功执行该函数。

非常感谢任何建议/帮助。

1 个答案:

答案 0 :(得分:2)

您需要将Funcion导入添加到EDMX的SSDL部分。如果使用XML编辑器打开EDMX,您将看到EDMX由三部分组成:

  • SSDL
  • CSDL
  • C-S Mapping

SSDL位于edm:StorageModels节点内。这就是你需要添加函数导入的地方。如果在Visual Studio中以XML格式打开EDMX文件,则会获得IntelliSense,表明您可以添加Function节点。