簡體   English   中英

ASP.Net Core將數據從SQL數據庫復制到SQLite

[英]ASP.Net Core Copying Data from SQL Database to SQLite

我正在將應用程序轉換為ASP.Net Core,要求用戶在某些情況下能夠脫機工作。 以前,我們通過將數據復制到SQLite數據庫中並將該數據下載到客戶端上來進行處理。 我在ASP.NET Core / Entity Framework的上下文中遇到一些問題。

對於上下文,我有一個看起來像這樣的模型:

public class Facility
{
    public Guid Id {get; set;}
    public string Code {get; set;}
    public string Description {get; set;}
}

用於構建SQLite數據庫的sql腳本如下所示:

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();
}

除了將GUID Id值插入到SQLite數據庫中會遇到一些麻煩之外,此方法效果很好。 在SQLite Studio中查詢SQLite數據庫顯示值問題。

GUID值錯誤

我猜測這與SQLite實際上不支持正式的GUID數據類型有關, 如此處所示。 因此,我的模型類中的GUID Id的值未正確轉換。 無論如何,我可以得到GUID值以正確復制嗎?

注意:我對這個問題的原始方法是為需要復制的每一行生成插入語句,然后在一個事務中全部運行它們。 這項工作起初很有效,但是在嘗試插入大約1萬條記錄時很快就變得不可行。

我認為問題在於您正試圖重用相同的DbContext,並且應該為Sqlite創建單獨的DbContext並為sqlite生成單獨的遷移。 遷移代碼的生成方式因提供商而異,當您使用sqlite提供商生成遷移時,它知道如何處理Guid屬性,並將在其自身的遷移中使用字符串。

您可能已經進行了MSSQL遷移,並且正在嘗試使用uniqueidentifier和其他特定於MSSQL的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM