2015-11-08 54 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(); 
     }