SQLite-Net Extensions: удаление подробных записей в сценарии Master / Detail - PullRequest
0 голосов
/ 06 ноября 2018

Как правильно удалить записи из хвоста?

У меня есть сущность Stock (основной) в отношении OneToMany с сущностью оценки (деталь).

Я извлекаю одну Фондовую компанию с соответствующими оценками. Затем я удаляю сущность из списка оценок и вызываю UpdateWithChildrenAsync.

Результатом этого обновления является то, что в удаленной оценке внешний ключ равен NULL, а я хочу, чтобы эта запись была физически удалена.

namespace TestSQLitePCL
{
    public class Stock
    {
        [PrimaryKey, AutoIncrement]
        public int? Id { get; set; }
        public string Symbol { get; set; }

        [OneToMany(CascadeOperations = CascadeOperation.All)]
        public List<Valuation> Valuations { get; set; }
    }
}

namespace TestSQLitePCL
{
    public class Valuation
    {
        [PrimaryKey, AutoIncrement]
        public int? Id { get; set; }
        [ForeignKey(typeof(Stock))]
        public int StockId { get; set; }
        public DateTime Time { get; set; }
        public decimal Price { get; set; }
    }
}



...
stock.Valuations.RemoveAt(0);
...
await _connection.UpdateWithChildrenAsync(stock);

1 Ответ

0 голосов
/ 07 ноября 2018

Удаление элемента из отношения не должно удалять этот объект из базы данных.

Вы можете удалить их вручную при удалении их из отношения (убедившись, что никто не ссылается на эту запись):

// Remove valuation from stock list
stock.Valuations.Remove(valuation);
await valuation.DeleteAsync();

Или регулярно удаляйте потерянные объекты, чтобы поддерживать базу данных в чистоте.

// Delete orphaned valuations
conn.Execute("DELETE FROM Valuation WHERE stock_id = 0");
...