2

スターリングサービスを利用しています

public sealed class SterlingService : IApplicationService, IApplicationLifetimeAware, IDisposable
{
    private SterlingEngine _engine;
    private static readonly ISterlingDriver _driver = new IsolatedStorageDriver();

    public static SterlingService Current { get; private set; }
    public ISterlingDatabaseInstance Database { get; private set; }

    public static void StartUpDatabase()
    {
        Current.Database = Current._engine.SterlingDatabase.RegisterDatabase<LocalDB>(_driver);
    }
    ....
    ....
}

そして、私がテーブル定義を持っている私のLocalDBクラスは次のとおりです。

public class LocalDB : BaseDatabaseInstance
{


    protected override List<ITableDefinition> RegisterTables()
    {
        return new List<ITableDefinition>()
          {
             CreateTableDefinition<ContactData, Guid>(k => k.UID.Value)
             .WithIndex<ContactData, int, Guid>("CustomerId", t => t.CustomerId.Value),


              CreateTableDefinition<ContactDetailData, Guid>(k => k.ContactData.UID.Value)
             .WithIndex<ContactDetailData, int, Guid>("CustomerId", t => t.ContactData.CustomerId.Value),
             ....
          };
    }
}

ここで問題となるのは、ストレージからデータを取得するときです。保存は正常に機能しますが、フェッチすると「文字列からGUIDへの無効なキャスト操作の例外」が発生します。

    public static List<ContactData> GetContactListFromLocalDB(int customerId)
    {
        var data = (from k in SterlingService.Current.Database.Query<ContactData, int, Guid>("CustomerId")
                    where k.LazyValue != null && k.Index == customerId
                    select k.LazyValue.Value);
        return data.ToList<ContactData>();  (**HERE I GET THE EXCEPTION**)
    }

どこが間違っているのか教えてください。

ありがとう。

4

2 に答える 2

0

CustomerId複数のインデックスに名前を使用すると問題が発生する可能性があります。

インデックスの名前をandCustomerIdのような名前に変更してみてください(同様に、表示されていない他のインデックスについても同様です)。ContactData_CustomerIdContactDetailData_CustomerId

Sterlingのドキュメントには、名前が一意である必要があることを示唆するものは何も見つかりません。それでも、Sterlingを使用したときは、すべてのインデックスに異なる名前を付けたので、そのような問題は発生しませんでした。

(余談ですが、すべてのインデックス名をどこかの文字列定数に移動することもお勧めします。これにより、タイプミスを回避でき、IntelliSenseのサポートも受けられるはずです。)

于 2011-07-17T12:31:06.410 に答える
0

http://sterling.codeplex.com/workitem/14343

于 2011-10-12T09:16:21.580 に答える