我想在xml中保存日期列表,我想使用数据集来完成任务,我对使用Entity Framework的数据库也是如此。这使我可以使用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#的新手,将不胜感激
答案 0 :(得分:0)
此代码基于generate xml files based on my c# classes有效。我会将您的课程重命名为“事件”和“日期”以外的名称。这些名称太笼统,通常受系统保护。 ICollection不可序列化。阅读XML serialization of interface property。您可以使用DTO或更改集合类型(即使用List <>)和XML序列化属性,避免循环引用和/或禁用延迟加载(即,通过Include方法使用急切加载),否则可能会导致整个序列化数据库。
Program.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>
答案 1 :(得分:0)
如果我理解正确,则只想使用数据集重现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