Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net核心将数据从SQL数据库复制到SQLite_C#_Sql Server_Entity Framework_Sqlite_Asp.net Core - Fatal编程技术网

C# ASP.Net核心将数据从SQL数据库复制到SQLite

C# ASP.Net核心将数据从SQL数据库复制到SQLite,c#,sql-server,entity-framework,sqlite,asp.net-core,C#,Sql Server,Entity Framework,Sqlite,Asp.net Core,我正在将一个应用程序转换为ASP.NETCore,它要求用户在某些情况下能够脱机工作。以前,我们通过将数据复制到SQLite数据库中,并将该数据下载到客户端来处理此问题。我在ASP.NET核心/实体框架的上下文中遇到了一些问题 对于上下文,我有一个如下所示的模型: public class Facility { public Guid Id {get; set;} public string Code {get; set;} public string Descripti

我正在将一个应用程序转换为ASP.NETCore,它要求用户在某些情况下能够脱机工作。以前,我们通过将数据复制到SQLite数据库中,并将该数据下载到客户端来处理此问题。我在ASP.NET核心/实体框架的上下文中遇到了一些问题

对于上下文,我有一个如下所示的模型:

public class Facility
{
    public Guid Id {get; set;}
    public string Code {get; set;}
    public string Description {get; set;}
}
CREATE TABLE [Facility] (
[Id] uniqueidentifier NOT NULL
, [Code] nvarchar(8)  NOT NULL
, [Description] nvarchar(30)  NULL
, CONSTRAINT [PK_Facility] PRIMARY KEY ([Id])
);
用于构建SQLite数据库的sql脚本如下所示:

public class Facility
{
    public Guid Id {get; set;}
    public string Code {get; set;}
    public string Description {get; set;}
}
CREATE TABLE [Facility] (
[Id] uniqueidentifier NOT NULL
, [Code] nvarchar(8)  NOT NULL
, [Description] nvarchar(30)  NULL
, CONSTRAINT [PK_Facility] PRIMARY KEY ([Id])
);
我正在Sql数据库和SQLite数据库之间复制数据,如下所示:

var optionsBuilder = new DbContextOptionsBuilder<MyContext>();

optionsBuilder.UseSqlite(MyConnectionString);

using (var sqliteContext = new MyContext(optionsBuilder.Options))
{
    await sqliteContext.Fac.AddRangeAsync(CollectionOfFacilityObjects);

    await sqliteContext.SaveChangesAsync();
}
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseSqlite(MyConnectionString);
使用(var sqliteContext=newmycontext(optionsBuilder.Options))
{
等待sqliteContext.Fac.addRangeAncy(CollectionOffacilityObject);
等待sqliteContext.saveChangesSync();
}
除了将
GUID
Id值插入SQLite数据库时出现一些问题外,这种方法工作得很好。在SQLite Studio中查询SQLite数据库显示了这些值的问题

我猜这与SQLite实际上不支持官方的
GUID
数据类型有关,因此我的模型类中
GUID
Id的值没有正确转换。我是否可以获得
GUID
值以正确复制


注意:我解决这个问题的最初方法是为需要复制的每一行生成insert语句,并在一个事务中运行它们。这最初是可行的,但在尝试插入超过10k条记录时很快变得不可行。

我认为问题在于您试图重新使用相同的DbContext,您应该为Sqlite创建单独的DbContext,并为Sqlite生成单独的迁移。 每个提供程序生成的迁移代码不同,当您使用sqlite提供程序生成迁移时,它知道如何处理Guid属性,并将在自己的迁移中使用字符串


您可能已经有了MSSQL迁移,这些迁移正试图使用uniqueidentifier和其他MSSQL特定语法。

我需要这样做,但出于性能原因,我正在考虑您最初的方法。您是否发现使用EF保存更改比在事务中执行Sqlite插入快得多?@Jon使用EF保存更改时,我们从未遇到任何perormance问题,但我们也从未真正感到有必要尝试直接Sqlite插入。所以我没有真正的比较。好的,谢谢,很高兴知道。我担心通过EF的>10K记录会很慢。