0

Sterling Database forWindowsPhoneに問題があります。wp7appにデータベースを段階的に実装しましたが、新しいエンティティが保存されたときにデータがシリアル化されません。例:スターリングデータベースを使用して資格情報をシリアル化します。

        var userCredentials = new UserCredentials(userName, password);
        App.Database.Save(userCredentials);
        App.Database.Flush();

ただし、アプリケーションが再アクティブ化(または再起動)されると、Sterlingは分離されたストレージから値を返しません。

var firstOrDefault = App.Database.Query<UserCredentials, string>()
            .ToList()
            .FirstOrDefault();

私のActivateEngineメソッドの外観は標準であり、TableDefinitionは次のとおりです。

CreateTableDefinition< UserCredentials, string >(t => t.UserName),

スターリングデータベースがデータをシリアル化しないのはなぜですか?すべてが正常に実装されているようです。助けてください。

4

1 に答える 1

1

クイックスタートで説明されているように、起動時にデータベースをアクティブ化して登録し、完了時に破棄しますか?

私の個人的な好みは、次のようなアプリケーションサービスを使用することです。

namespace MyApp.Data
{
    using System.Windows;
    using Wintellect.Sterling;
    using Wintellect.Sterling.IsolatedStorage;

    /// 
    /// Defines a an application service that supports the Sterling database.
    /// 
    public class SterlingDatabaseService : IApplicationService, IApplicationLifetimeAware
    {
        public static SterlingDatabaseService Current { get; private set; }

        public ISterlingDatabaseInstance Database { get; private set; }

        private SterlingEngine _engine;

        /// 
        /// Called by an application in order to initialize the application extension service.
        /// 
        /// Provides information about the application state.
        public void StartService(ApplicationServiceContext context)
        {
            Current = this;
            _engine = new SterlingEngine();
        }

        /// 
        /// Called by an application in order to stop the application extension service.
        /// 
        public void StopService()
        {
            _engine = null;
        }

        /// 
        /// Called by an application immediately before the  event occurs.
        /// 
        public void Starting()
        {
            _engine.Activate();
            Database = _engine
                .SterlingDatabase
                .RegisterDatabase(new IsolatedStorageDriver());
        }

        /// 
        /// Called by an application immediately after the  event occurs.
        /// 
        public void Started()
        {
            return;
        }

        /// 
        /// Called by an application immediately before the  event occurs.
        /// 
        public void Exiting()
        {
            _engine.Dispose();
        }

        /// 
        /// Called by an application immediately after the  event occurs.
        /// 
        public void Exited()
        {
            return;
        }
    }
}

このアプローチを使用する場合は、App.xamlにインスタンスを追加することを忘れないでください。

    <Application.ApplicationLifetimeObjects>
        <!-- Required object that handles lifetime events for the application. -->
        <shell:PhoneApplicationService Activated="Application_Activated"
                                       Closing="Application_Closing"
                                       Deactivated="Application_Deactivated"
                                       Launching="Application_Launching" />
        <data:SterlingDatabaseService />
    </Application.ApplicationLifetimeObjects>
于 2011-09-19T08:42:52.970 に答える