C# 从SQL Server导出/导入数据子集
作为我们应用程序的一项功能,我希望找到将相关数据的子集从SQL Server 2008 Express数据库导出到磁盘的最佳方法。导出的内容需要导入,并将标识保存到另一个数据库和服务器中 我有一个包含143个表的中型数据模型,在这个模型上,我在应用程序中使用EntityFramework 3.5进行数据访问。从模型中,我想根据给定的条件从几乎所有的表中提取行 对于C#和实体框架来说是新手,但对于SQL Server来说不是新手,我从另一个开发人员那里接管了这个项目,他开始为每个要提取的实体编写ToXML()方法(完成了20%)。显然是维护的噩梦。更糟糕的是FromXML()到实体,其中存在与唯一键等有关的复杂性 我尝试了选择。。。对于XML自动,XMLSCHEMA与Microsoft SQLXML批量加载相结合。虽然一开始它与普通的普通表配合得很好,但我很快就陷入了死胡同,因为它似乎不支持没有模式的XML数据类型,或者至少不支持大量手动干预的XML数据类型。我们有几个带有XML数据类型列的表。另外,批量加载还存在一些未知的复杂性,通常与触发器、空值、唯一键和约束有关,我想还有更多我还没有遇到过的问题 我的一个想法是为我们的数据库编写一个匹配的XSD模式(或生成一个),并使用XSD.exe生成一个类模型作为DTO的集合。然后使用像AutoMapper这样的映射库来填充DTO并将它们序列化到磁盘。然后在导入时执行相反的操作 我知道这是一个大而广泛的问题,但有人能提供一些指导或想法吗? 实体框架中的选项是否可以实现这一点?C# 从SQL Server导出/导入数据子集,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,作为我们应用程序的一项功能,我希望找到将相关数据的子集从SQL Server 2008 Express数据库导出到磁盘的最佳方法。导出的内容需要导入,并将标识保存到另一个数据库和服务器中 我有一个包含143个表的中型数据模型,在这个模型上,我在应用程序中使用EntityFramework 3.5进行数据访问。从模型中,我想根据给定的条件从几乎所有的表中提取行 对于C#和实体框架来说是新手,但对于SQL Server来说不是新手,我从另一个开发人员那里接管了这个项目,他开始为每个要提取的实体编写T
有开源库可以做到这一点吗?我不知道您的对象模型,但您可以只使用XML序列化吗
public static string ObjectToXML(object Object)
{
if (Object == null)
throw new ArgumentException("Object can not be null");
using (MemoryStream Stream = new MemoryStream())
{
XmlSerializer Serializer = new XmlSerializer(Object.GetType());
Serializer.Serialize(Stream, Object);
Stream.Flush();
return UTF8Encoding.UTF8.GetString(Stream.GetBuffer(), 0, (int)Stream.Position);
}
}
public static T XMLToObject<T>(string XML)
{
if (string.IsNullOrEmpty(XML))
throw new ArgumentException("XML can not be null/empty");
using (MemoryStream Stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(XML)))
{
XmlSerializer Serializer = new XmlSerializer(typeof(T));
return (T)Serializer.Deserialize(Stream);
}
}
公共静态字符串ObjectToXML(对象对象)
{
if(Object==null)
抛出新ArgumentException(“对象不能为null”);
使用(MemoryStream Stream=new MemoryStream())
{
XmlSerializer Serializer=新的XmlSerializer(Object.GetType());
序列化(流、对象);
Stream.Flush();
返回UTF8Encoding.UTF8.GetString(Stream.GetBuffer(),0,(int)Stream.Position);
}
}
公共静态T XMLToObject(字符串XML)
{
if(string.IsNullOrEmpty(XML))
抛出新ArgumentException(“XML不能为null/空”);
使用(MemoryStream Stream=new MemoryStream(UTF8Encoding.UTF8.GetBytes(XML)))
{
XmlSerializer Serializer=新的XmlSerializer(typeof(T));
返回(T)序列化程序。反序列化(流);
}
}
但我看到的主要问题是XML数据(可能在序列化之前将其包装在CDATA中?。我不知道您的对象模型,但您是否可以使用XML序列化
public static string ObjectToXML(object Object)
{
if (Object == null)
throw new ArgumentException("Object can not be null");
using (MemoryStream Stream = new MemoryStream())
{
XmlSerializer Serializer = new XmlSerializer(Object.GetType());
Serializer.Serialize(Stream, Object);
Stream.Flush();
return UTF8Encoding.UTF8.GetString(Stream.GetBuffer(), 0, (int)Stream.Position);
}
}
public static T XMLToObject<T>(string XML)
{
if (string.IsNullOrEmpty(XML))
throw new ArgumentException("XML can not be null/empty");
using (MemoryStream Stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(XML)))
{
XmlSerializer Serializer = new XmlSerializer(typeof(T));
return (T)Serializer.Deserialize(Stream);
}
}
公共静态字符串ObjectToXML(对象对象)
{
if(Object==null)
抛出新ArgumentException(“对象不能为null”);
使用(MemoryStream Stream=new MemoryStream())
{
XmlSerializer Serializer=新的XmlSerializer(Object.GetType());
序列化(流、对象);
Stream.Flush();
返回UTF8Encoding.UTF8.GetString(Stream.GetBuffer(),0,(int)Stream.Position);
}
}
公共静态T XMLToObject(字符串XML)
{
if(string.IsNullOrEmpty(XML))
抛出新ArgumentException(“XML不能为null/空”);
使用(MemoryStream Stream=new MemoryStream(UTF8Encoding.UTF8.GetBytes(XML)))
{
XmlSerializer Serializer=新的XmlSerializer(typeof(T));
返回(T)序列化程序。反序列化(流);
}
}
我看到的主要问题是XML数据(可能在序列化之前将其包装在CDATA中?。使用SQL Server Compact保存导出怎么样。然后,您可以使用Microsoft Sync Framework导出/导入所有需要的数据,包括身份
请参阅和如何使用SQL Server Compact保存导出。然后,您可以使用Microsoft Sync Framework导出/导入所有需要的数据,包括身份 看到和