簡體   English   中英

Linq2Db:如何在(批量)插入上包含導航屬性

[英]Linq2Db: How to include navigation properties on (bulk-)insert

我正在嘗試使用批量插入功能。 我的 model 看起來像這樣:

public class Stockprice
{
    [Key]
    public int Id { get; set; }
    
    [Required]
    [LinqToDB.Mapping.Association(ThisKey = "StockId", OtherKey = "Id")]
    public Stock Stock { get; set; }
    
    //some more
}

public class MinuteStockprice : Stockprice { }

代碼插入代碼:

private async Task SavePrices<T>(List<Quote> quotes) where T : Stockprice, new()
{
    using var context = _factory.CreateDbContext();
    var connection = context.CreateLinqToDbConnection();
    connection.TraceSwitchConnection.Level = TraceLevel.Verbose;
    connection.OnTraceConnection = x => Console.WriteLine(x.SqlText);
    var stocks = new List<T>();
    foreach (var quote in quotes)
    {
        var price = new T { Stock = new Stock() { Id = _isinToStockId[quote.Isin] }, Ask = quote.Ask, Bid = quote.Bid, Time = quote.Time };
        stocks.Add(price);
        context.Stocks.Attach(price.Stock);
    }
    await connection.BulkCopyAsync(stocks);
    //await context.BulkCopyAsync(stocks);
}

不知道我錯過了什么,但它沒有插入 StockId。 這是生成的 Sql 的頭部:

INSERT INTO [MinuteStockprices]
(
        [Time],
        [Ask],
        [Bid]
)

如何在此處包含 StockId?

編輯

該表是這樣創建的:

CREATE TABLE "MinuteStockprices" (
    "Id" INTEGER NOT NULL CONSTRAINT "PK_MinuteStockprices" PRIMARY KEY AUTOINCREMENT,
    "StockId" INTEGER NOT NULL,
    "Bid" REAL NOT NULL,
    "Ask" REAL NOT NULL,
    "Time" TEXT NOT NULL,
    CONSTRAINT "FK_MinuteStockprices_Stocks_StockId" FOREIGN KEY ("StockId") REFERENCES "Stocks" ("Id") ON DELETE CASCADE
)

BulkCopy是低級命令,它插入到一張表中,並且只在一張表中。 如果您需要插入詳細信息,則必須單獨進行。

還要檢查 class 是否具有StockId屬性,因為不支持陰影屬性。

暫無
暫無

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

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