【问题标题】:C# - XML doc not being saved into the databaseC# - XML 文档未保存到数据库中
【发布时间】:2013-09-20 11:04:30
【问题描述】:

我有这段代码将 JSON 转换为 XML,然后将数据插入到表中。但是xml数据所在的表列是空的。它没有插入。

[HttpPost]
        public void SaveData(Newtonsoft.Json.Linq.JObject data)
        {
            string agency = data.Root.ToString();
            XmlDocument doc = JsonConvert.DeserializeXmlNode(agency, "agency");

            Newtonsoft.Json.Linq.JToken[] ArrAgency = data.Root.ToArray();

            dynamic DeserializedData = JsonConvert.DeserializeObject(data.ToString());

            tblAgencyQuery tblAgencyQuery = new tblAgencyQuery();
            tblAgencyQuery.QueryID = Guid.NewGuid();
            tblAgencyQuery.QueryText = doc;
            tblAgencyQuery.AgencyID = DeserializedData.agencyID;
            tblAgencyQuery.CreatedDate = DateTime.UtcNow;

            _ContextProvider.Context.tblAgencyQuery.Add(tblAgencyQuery);
            _ContextProvider.Context.Entry(tblAgencyQuery).State = System.Data.EntityState.Added;
            _ContextProvider.Context.SaveChanges();

        }

我的模型

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace AgencyUpdate.Models
{
    public class tblAgencyQuery
    {
        [Key]
        public Guid QueryID { get; set; }
        [NotMapped]
        public System.Xml.XmlDocument QueryText { get; set; }
        public int AgencyID { get; set; }
        public DateTime CreatedDate { get; set; }
    }
}

表的 SQL 脚本

USE [GenesisOnline]
GO

/****** Object:  Table [dbo].[tblAgencyQuery]    Script Date: 20/09/2013 11:17:34 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

    CREATE TABLE [dbo].[tblAgencyQuery](
        [QueryID] [uniqueidentifier] NOT NULL,
        [QueryText] [xml] NULL,
        [AgencyID] [int] NULL,
        [CreatedDate] [datetime] NULL,
     CONSTRAINT [PK_tblAgencyQuery] PRIMARY KEY CLUSTERED 
    (
        [QueryID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON

, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[tblAgencyQuery] ADD  CONSTRAINT [DF_tblAgencyQuery_CreatedDate]  DEFAULT (getutcdate()) FOR [CreatedDate]
GO

知道为什么这不插入 xml 吗?

【问题讨论】:

  • 它真的意味着拥有[NotMapped] 属性吗?
  • @RowlandShaw 如果没有该属性,我会收到运行时错误。我正在使用 Breeze.WebApi 来执行我的 CRUD 方法。
  • [NotMapped] 的意思是“在映射到/从数据库时忽略这个。参见msdn.microsoft.com/en-us/library/… 这就是为什么没有插入任何内容。什么是运行时错误?
  • 您可能想要修复该运行时错误(无论它是什么),因为您当前说 XML 未持久化到数据库中。

标签: c# sql xml types breeze


【解决方案1】:

某些 ORM 不支持包含非常大值的数据类型(例如文本数据类型等)。虽然我不熟悉 Breeze,但如果发现这是您的潜在运行时错误的原因,我不会感到惊讶。我相信 xml 数据类型的最大大小是几 GB。

正如其他人所说,[NotMapped] 是导致 null 的原因。您明确告诉系统不要对该字段执行任何操作。

您需要解决数据类型的(可能的)潜在问题以消除运行时错误,然后删除 [NotMapped] 属性。由于我对 Breeze 不熟悉,因此无法为您提供具体指导,但这至少应该是搜索的起点。

【讨论】:

  • 谢谢,我会进一步调查。
猜你喜欢
  • 2020-03-26
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2021-11-01
  • 1970-01-01
  • 2018-07-22
  • 2013-11-11
相关资源
最近更新 更多