C# 我正在尝试从实体框架返回XML数据

C# 我正在尝试从实体框架返回XML数据,c#,xml,entity-framework-6,C#,Xml,Entity Framework 6,我已经使用web API创建了一个MVC5 web应用程序。 我还使用实体框架6 我有一个存储过程: SELECT * FROM [Group] WHERE CompanyRef = @CompanyRef OR CompanyRef = '00000000-0000-0000-0000-000000000000' AND Active = 1 FOR XML PATH('Group'), ROOT ('Groups') 它在查询分析器中返回: <Groups> <Gr

我已经使用web API创建了一个MVC5 web应用程序。 我还使用实体框架6

我有一个存储过程:

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>
检查“test”的值,我得到:

没有我的XML的迹象?

您可以使用:

 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();
        }
您可以使用:

 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();
        }

实体如何自动识别字符串是xml。您必须将字符串转换为xml对象。@jdweng您好,谢谢您的评论。是的,我知道,但我希望结果视图以字符串格式显示我的XML?使用XMLLINQ:XDocument doc=XDocument.Parse(字符串);如果调用
test.ToArray()
,会得到什么结果?结果类型应该是
string[]
,它应该包含一个项目,即XML?我很犹豫是否将此作为一个答案提交,我不完全清楚这是否会给出您想要的内容。实体如何自动识别字符串是xml。您必须将字符串转换为xml对象。@jdweng您好,谢谢您的评论。是的,我知道,但我希望结果视图以字符串格式显示我的XML?使用XMLLINQ:XDocument doc=XDocument.Parse(字符串);如果调用
test.ToArray()
,会得到什么结果?结果类型应该是
string[]
,它应该包含一个项目,即XML?我很犹豫是否将此作为一个答案提交,我不完全清楚这是否会给你你想要的。
 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();
        }