2015-11-08 57 views
1

我已經使用Web API創建了一個MVC5 Web應用程序。 我也用實體框架6.我試圖從實體框架返回XML數據

我有一個存儲過程:

SELECT * FROM [Group] WHERE CompanyRef = @CompanyRef OR CompanyRef = '00000000-0000-0000-0000-000000000000' AND Active = 1 
FOR XML PATH('Group'), ROOT ('Groups') 

它在查詢分析器返回此:

<Groups> 
    <Group> 
    <GroupId>1</GroupId> 
    <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
    <Name>Todays Work</Name> 
    <Description>System</Description> 
    <CompanyRef>00000000-0000-0000-0000-000000000000</CompanyRef>  
    <Active>1</Active> 
    </Group> 
    <Group> 
    <GroupId>2</GroupId> 
    <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
    <Name>All</Name> 
    <Description>System</Description> 
    <CompanyRef>00000000-0000-0000-0000-000000000000</CompanyRef> 
    <Active>1</Active> 
    </Group> 
</Groups> 

在函數導入聲明的返回類型(EF)是一個字符串。

在我的服務類我「連接」到實體模型通過調用這個:

public ObjectResult<string> Get(Guid? companyRef) 
{ 
    return o.Group_Get(companyRef); 
} 

在我的API控制器我打電話給我的服務功能是這樣的:

Compression compression = new Compression(); 
var test = groupRepository.Get(companyRef); 

檢查的價值'測試' 我得到這個:

enter image description here

的重新是沒有我的XML的跡象?

+0

如何實體自動識別字符串是XML。您必須將該字符串轉換爲xml對象。 – jdweng

+0

@jdweng您好,感謝您的評論。是的,我知道但我期望結果視圖以字符串格式顯示我的XML? –

+0

使用xml linq:XDocument doc = XDocument.Parse(string); – jdweng

回答

0

您可以使用:

using (SqlConnection con = new SqlConnection(_dbContext.Database.Connection.ConnectionString)) 
     { 
      #region Connection Open 

      SqlCommand cmd = new SqlCommand("mbl_GetCourseMat", con); 
      cmd.CommandType = System.Data.CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@Par1", "par1"); 
      cmd.Parameters.AddWithValue("@Par2", 2); 

      con.Open(); 

      #endregion 

      #region Reader XML 

      using (XmlReader reader = cmd.ExecuteXmlReader()) 
      { 
       while (reader.Read()) 
       { 
        string result = reader.ReadOuterXml(); 
        if (!String.IsNullOrEmpty(result)) 
        { 
         XmlSerializer xs = new XmlSerializer(typeof(MobilCourseMatModel)); 
         using (MemoryStream ms = new MemoryStream()) 
         { 
          byte[] buffer = Encoding.UTF8.GetBytes(result); 
          ms.Write(buffer, 0, buffer.Length); 
          ms.Position = 0; 
          using (XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8)) 
          { 
           model = (MobilCourseMatModel)xs.Deserialize(ms); 
          } 
         } 
        } 
       } 
      } 

      #endregion 

      con.Close(); 
     }