【问题标题】:Is there a way to save a list of objects in dataset in c#有没有办法在c#中保存数据集中的对象列表
【发布时间】:2020-03-20 01:59:45
【问题描述】:

我想在 xml 中保存日期列表,我想使用数据集来完成任务,我对使用实体框架的数据库做同样的事情。这允许我使用event.eventDates.start 访问日期 但在数据集中我无法实现。

   public class Event
    {
        [Key]
        public string id { get; set; }

        public virtual ICollection<Date> eventDates { get; set; }
    }

日期类

   public class Date
    {
        public DateTime start { get; set; }
        public DateTime end { get; set; }
    }

使用实体框架时,我可以使用 event.eventDates.start 访问 eventDates 对象 我在数据集构建器中映射了来自 sql 数据库的数据,关系看起来像这样

我希望 xml 文件采用这种格式

<?xml version="1.0" standalone="yes"?>
<db xmlns="http://tempuri.org/LocalDB.xsd">
  <Event>
    <id>ID</id>
    <eventdates>
      <date>
         <startdate></startdate>
         <enddate></enddate>
      <date>  
      <date>
         <startdate></startdate>
         <enddate></enddate>
      <date>  
    </eventdates>
  </Event>
</db>

有没有办法使用数据集来实现这一点? 我是 C# 新手,任何帮助将不胜感激

【问题讨论】:

标签: c# datatable dataset


【解决方案1】:

如果我理解正确,您只想使用 DataSet 重现 EntityFramework 的行为。 只需使用适当的表、字段和关系创建 DataSet(使用集成的 VisualStudio 设计器)即可实现完全相同的目标:

稍后您可以使用如下代码访问您的数据:

var ds = new DataSet1();
var ue = ds.UserEvents.FirstOrDefault();
var ued = ue.GetChildRows("FK_UserEvents_EventDates")
          .Cast<DataSet1.EventDatesRow>();

var date = ued.FirstOrDefault().Date;

接下来要做的是序列化——这很容易: Serialization example

【讨论】:

    【解决方案2】:

    此代码有效,基于generate xml files based on my c# classes。我会将您的课程重命名为“事件”和“日期”以外的其他名称。这些名称过于笼统,通常受系统保护。 ICollection 不可序列化。阅读XML serialization of interface property。您可以使用 DTO 或者您可以更改集合类型(即使用 List)并使用 XML 序列化属性避免循环引用和/或禁用延迟加载(即使用 Include 方法使用急切加载)或风险是您序列化整个数据库。

    程序.cs:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Xml.Serialization;
    
    namespace EFToXml
    {
        public class MyEvent
        {
            public string Id { get; set; }
    
            public virtual List<MyDate> EventDates { get; set; }
        }
    
        public class MyDate
        {
            public DateTime Start { get; set; }
            public DateTime End { get; set; }
        }
        public class Program
        {
            public static void Main(string[] args)
            {
                var myDate1 = new MyDate
                {
                    Start = DateTime.Now,
                    End = DateTime.Now.AddDays(1)
                };
                var eventDates = new List<MyDate> { myDate1 };
                var myEvent = new MyEvent
                {
                    Id = "1",
                    EventDates = eventDates
                };
    
                XmlSerializer serializer = new XmlSerializer(typeof(MyEvent));
                serializer.Serialize(File.Create(@"C:\Users\<UserName>\Source\Repos\myEvents.xml"), myEvent);
    
            }
        }
    }
    

    myEvents.xml:

    <?xml version="1.0"?>
    <MyEvent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Id>1</Id>
      <EventDates>
        <MyDate>
          <Start>2019-11-24T21:52:04.5032671+01:00</Start>
          <End>2019-11-25T21:52:04.5194026+01:00</End>
        </MyDate>
      </EventDates>
    </MyEvent>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多