2016-03-20 12 views
2

方法:発見のsqlite-NET-拡張でネストされたリストを行い
回答:それを行う方法の一例として、質問を維持。
私が遭遇した問題は、sqlite-net-extensions関連ではありませんでしたが、私は文脈の問題を残しています。方法:SQLiteの-Netの拡張機能でネストされたリスト

[旧質問] 私はTwinCoders SQLiteのネットの拡張機能に問題を持っている
私は私のデータベースにSeriesオブジェクトを挿入しようとしている:

私はDb.InsertWithChildren(SelectedSeriesObject,recursive:true)メソッドを使用しています。
Seriesオブジェクトは、その属性に従ってそれに応じて追加されます。
すべてのエピソードも追加されていますが、問題はありません。

問題はBaseSeasonです。
それだけで(何らかの理由で)で1シーズンオブジェクト、シリーズ

public class BaseSeries : BaseMedia 
{ 
[PrimaryKey, AutoIncrement] 
public int Id { get; set; } 

[Indexed] 
public int ShowId { get; set; } 

public string FirstAirDate { get; set; } 
public string LastAirDate { get; set; } 
public string Status { get; set; } 

[OneToMany(CascadeOperations = CascadeOperation.All)] 
public List<BaseSeason> Seasons { get; set; } 
/// <summary> 
/// TvShow = 0, Anime = 1 
/// </summary> 
public int SeriesType { get; set; } 

} 

public class BaseSeason 
{ 
[PrimaryKey, AutoIncrement] 
public int Id { get; set; } 

[ForeignKey(typeof(BaseSeries))] 
public int SeasonId { get; set; } 

public int SeasonNumber { get; set; } 
public int NumberOfEpisodes { get; set; } 
public string Plot { get; set; } 
public string Poster { get; set; } 
public string AirDate { get; set; } 

[OneToMany(CascadeOperations = CascadeOperation.All)] 
public List<BaseEpisode> Episodes { get; set; }  
[ManyToOne] 
public BaseSeries BaseSeries { get; set; } 

} 

public class BaseEpisode 
{ 
[PrimaryKey, AutoIncrement] 
public int Id { get; set; } 

[ForeignKey(typeof(BaseSeason))] 
public int EpisodeId { get; set; } 

public string Title { get; set; } 
public string Plot { get; set; } 
public string Poster { get; set; } //still path 
public string AirDate { get; set; } 
public int EpisodeNumber { get; set; } 
public int SeasonNumber { get; set; } 
public string SeriesName { get; set; }  

[ManyToOne] 
public BaseSeason BaseSeason { get; set; } 
} 

で四季のリストの最後のシーズンオブジェクトのsqlite-NET-でネストされた関係に関する経験を持つ誰もがあります挿入されますどのようにこの仕事をするか、私が間違っていたかを知っている拡張機能?

Intended Relation

答えて

2

のでsqliteのネット-拡張でネストされたリストを書くことについて:

私の問題は、私は、これらのオブジェクトの作成を処理する方法に関連することが判明し、これはノーでありますsqlite-net拡張に関連することを意味します。だから私の悪い!

これは、質問の例が有効であり、動作することを意味します。 、
例シリーズクラス、シーズンクラスとエピソードクラスで、私の質問に示されている設定の正しい方法です:データベースのエンティティを設定

  • (私はもちろん、それをテストしました)それをアップ。データベースへの挿入

  • :あなたは(ネストされたリストで)私のシリーズオブジェクトに似たオブジェクトを挿入する方法を迷っている場合は
    、使用:

    :ここ
    db.InsertWitchChildren(yourObject, recursion: true)
    は、拡張された例です
    public void AddSeries() 
    {    
        MediaDB.db.CreateTable<BaseSeries>(); 
        MediaDB.db.CreateTable<BaseSeason>(); 
        MediaDB.db.CreateTable<BaseEpisode>(); 
    
        MediaDB.db.InsertWithChildren(SelectedSeries, recursion: true);    
    } 
    

側注:
例では、クラスの静的プロパティを接続文字列とともに使用します。これと同じように:この
をやってから

public class MediaDB 
    { 
     public static SQLiteConnection db => new SQLiteConnection(new SQLitePlatformGeneric(),"Media.db"); 
    } 

リフレインあなたがそれを完了したら、それが配置されています確認して、本当にあなたがSQLiteConnectionためusingを使用する必要があるため、行うための最善のものではありません。上

詳細:sqlite-net-extentions

[UPDATE]:子供を持つテーブルを削除

  • :sqliteのネットの拡張機能でネストされたリストを扱うのさらなる拡大
    これはかなりありますシンプルな、しかし私は良い時間と半分をとにかくそれを考え出した。
    ちょうど使用:exmapleとしてdb.Delete(yourObject, true);
    :単一オブジェクトの場合db.DeleteAll(yourCollection, recursion: true)
    :リスト/アレイの場合
    ここにリストを削除します方法の私の実装だ
    (BaseSeriesはクラスが元の質問の質問に示されています):

    BaseMovieクラスは単純な単一のエンティティであり、子を保持しないため再帰は不要です。

関連する問題