2011-07-17 54 views
2

我有一個出色的服務的Silverlight:925拋出異常

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**) 
    } 

請讓我知道我在做錯什麼。

謝謝。

回答

0

對於多個索引使用名稱CustomerId可能存在問題。

試着改變你的索引的名稱從CustomerId喜歡的東西ContactData_CustomerIdContactDetailData_CustomerId(以及類似的其他任何指標,你還沒有告訴我們)。

我在Sterling文檔中找不到任何建議名稱必須唯一的東西。儘管如此,當我使用Sterling時,我給了我所有的索引不同的名字,而且我沒有任何這樣的問題。

(順便說一句,這也可能是將你的所有索引名稱爲字符串常量的地方是個好主意。這有助於避免錯誤輸入他們,你也應該得到他們的IntelliSense支持。)