C# 从SQL Server导出/导入数据子集

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

作为我们应用程序的一项功能,我希望找到将相关数据的子集从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并将它们序列化到磁盘。然后在导入时执行相反的操作

我知道这是一个大而广泛的问题,但有人能提供一些指导或想法吗? 实体框架中的选项是否可以实现这一点?
有开源库可以做到这一点吗?

我不知道您的对象模型,但您可以只使用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导出/导入所有需要的数据,包括身份

看到和