如何附加EF函数返回的xml块



我有一个使用FOR XML的存储过程,它被映射到一个ef函数。不幸的是,我发现它只返回一定长度的块。

另一个SO用户向我指出了这个问题,这个问题相当诱人地暗示了我的问题的答案,只是附加xml块。不幸的是,它没有继续说明如何做到这一点。谁能告诉我该怎么做?我正在用vb编程。

编辑

这是在我的实体模型中生成的函数:

Public Overridable Function CreateErsSalesAddSubmission (ByVal uname As String, ByVal pword As String, ByVal salesContractRef As String, ByVal auctionId As String, ByVal sntype As String, ByVal action As String) As String
            Dim connection As EntityConnection = DirectCast(DirectCast(Me, IObjectContextAdapter).ObjectContext.Connection, EntityConnection)
            Dim needClose As Boolean = False
            If (connection.State <> System.Data.ConnectionState.Open) Then
              connection.Open()
              needClose = True
            End If
            Dim result As String
            Try
              Using command As EntityCommand = New EntityCommand()
                If DirectCast(Me, IObjectContextAdapter).ObjectContext.CommandTimeout.HasValue Then
                  command.CommandTimeout = DirectCast(Me, IObjectContextAdapter).ObjectContext.CommandTimeout.Value
                End If
                command.CommandType = System.Data.CommandType.StoredProcedure
                command.CommandText = "FishTrackerProfessionalEntities.CreateErsSalesAddSubmission"
                command.Connection = connection
                Dim unameParameter As EntityParameter = New EntityParameter("uname", System.Data.DbType.String)
                If (Not uname Is Nothing)
                  unameParameter.Value = uname
                End If
                command.Parameters.Add(unameParameter)
                Dim pwordParameter As EntityParameter = New EntityParameter("pword", System.Data.DbType.String)
                If (Not pword Is Nothing)
                  pwordParameter.Value = pword
                End If
                command.Parameters.Add(pwordParameter)
                Dim salesContractRefParameter As EntityParameter = New EntityParameter("salesContractRef", System.Data.DbType.String)
                If (Not salesContractRef Is Nothing)
                  salesContractRefParameter.Value = salesContractRef
                End If
                command.Parameters.Add(salesContractRefParameter)
                Dim auctionIdParameter As EntityParameter = New EntityParameter("auctionId", System.Data.DbType.String)
                If (Not auctionId Is Nothing)
                  auctionIdParameter.Value = auctionId
                End If
                command.Parameters.Add(auctionIdParameter)
                Dim sntypeParameter As EntityParameter = New EntityParameter("sntype", System.Data.DbType.String)
                If (Not sntype Is Nothing)
                  sntypeParameter.Value = sntype
                End If
                command.Parameters.Add(sntypeParameter)
                Dim actionParameter As EntityParameter = New EntityParameter("action", System.Data.DbType.String)
                If (Not action Is Nothing)
                  actionParameter.Value = action
                End If
                command.Parameters.Add(actionParameter)
                result = CType(command.ExecuteScalar(), String)
              End Using
            Finally
              If needClose Then
                connection.Close()
              End If
            End Try
            Return result
        End Function

不是让它返回字符串的标量值(被截断),我应该让它返回其他东西,如果是什么,又是如何处理返回。由于

我会修改你发布的函数,只更改这些行:

Public Overridable Function CreateErsSalesAddSubmissionXml (ByVal uname As String, ByVal pword As String, ByVal salesContractRef As String, ByVal auctionId As String, ByVal sntype As String, ByVal action As String) As String
...
            using reader as EntityDataReader = command.ExecuteReader()
                If reader.HasRows Then 
                    Do While reader.Read()
                        result = result + reader.GetString(0)
                    Loop 
                End If
            End Using

将行result = CType(command.ExecuteScalar(), String)替换为此

您应该重命名该方法(我在名称中添加了Xml,确保将其放在一个具有不同名称的文件中,这样文件就不会被覆盖),以便您在使用EF向导重新生成它时不会意外地覆盖它。这似乎可能会给您提供正确使用相同EF连接逻辑和整体框架的最佳平衡,但仍然可以让您正确处理返回的XML—EF似乎并没有真正为此设置(通常也可能不需要)。

最新更新