0

MVVM とポータブル ライブラリを使用するこの素晴らしい例を見つけ、非常に便利であることがわかりました。自分のプロジェクトやソリューションで使い始めたいと思っています。MVVM パターンを満たすこの例で、現在の Windows Phone アプリを移植し始めました。SQLCE のようなローカル データベースを抽象化する方法がわかりません。

私の非MVVMソリューションは次のようなものでした:

DataContext

public class ChallengeDataContext : DataContext
{
    public const string ConnectionString = "isostore:/challenges.sdf";

    public ChallengeDataContext(string connectionString)
        : base(connectionString)
    {
        this.Challenges = this.GetTable<Challenge>();
    }

    public Table<Challenge> Challenges { get; set; }
}

リポジトリ

public class ChallengeRepository
{
    public static void Initialize()
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            if (dc.DatabaseExists() == false)
            {
                dc.CreateDatabase();
                dc.SubmitChanges();
            }
        }
    }

    public static void SeedSampleData()
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            if (dc.DatabaseExists() != false && dc.Challenges.Count() == 0)
            {
                var challenge = new Challenge("Testing", 3, ChallengeKind.Writting, false);
                dc.Challenges.InsertOnSubmit(challenge1);
                dc.SubmitChanges();
            }
        }
    }

    public Challenge GetChallengeRandomly(int difficulty, ChallengeKind kind)
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            var challenge = (from ch in dc.Challenges
                             where ch.Difficulty == difficulty && ch.Kind == kind && ch.Shown == false
                             select ch).FirstOrDefault();
            return challenge;
        }

    }

    public void SaveChallenge(Challenge challenge)
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            dc.Challenges.InsertOnSubmit(challenge);
            dc.SubmitChanges();
        }
    }

    public void UpdateChallengeShownAttribute(int id, bool shown)
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            var challenge = (from ch in dc.Challenges
                             where ch.Id == id
                             select ch).FirstOrDefault();

            if (challenge != null)
            {
                challenge.Shown = shown;
                dc.SubmitChanges();
            }
        }
    }

    public void UpdateChallengeShownAttribute(int difficulty, ChallengeKind kind, bool shown)
    {
        using (ChallengeDataContext dc = new ChallengeDataContext(ChallengeDataContext.ConnectionString))
        {
            var challenges = from ch in dc.Challenges
                             where ch.Kind == kind && ch.Difficulty == difficulty
                             select ch;

            foreach (var challenge in challenges)
            {
                challenge.Shown = shown;
            }
            dc.SubmitChanges();
        }
    }
}

チャレンジクラス

[Table(Name = "Challenges")]
public class Challenge
{
    [Column(IsPrimaryKey = true,IsDbGenerated=true)]
    public int Id { get; set; }
    [Column]
    public string Name { get; set; }
    [Column]
    public int Difficulty { get; set; }
    [Column]
    public ChallengeKind Kind { get; set; }
    [Column]
    public bool Shown { get; set; }

    public Challenge()
    {
    }

    public Challenge(string name, int difficulty, ChallengeKind kind, bool shown)
    {
        Name = name;
        Difficulty = difficulty;
        Kind = kind;
        Shown = shown;
    }
}
public enum ChallengeKind
{
    Writting,
    Telling,
    Pantomime
}

私は基本を知っており、インターフェイスを作成するのは問題ありませんが、すべてのプロジェクトで使用できるモデル クラスを変更する方法がわかりません (属性を DataContract と DataMember に変更できますが、それを SQLCE で使用するにはどうすればよいですか?)。次に、どのプロジェクトでリポジトリを実装する必要がありますか? コードはすべてのプラットフォームで同じですが、Windows 8 は SQLCE を使用していないと思います。では、これをどのように数えますか?手伝ってくれてありがとう

4

0 に答える 0