Silverlight:英镑引发例外

时间:2011-07-17 12:03:28

标签: c# silverlight-4.0 isolatedstorage sterling-db

我有英镑服务

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);
    }
    ....
    ....
}

我拥有表定义的My 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),
             ....
          };
    }
}

现在问题是我从存储中获取数据。 保存工作正常,但是当我获取时,我得到“从String到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**)
    }

请告诉我我在哪里做错了。

感谢。

2 个答案:

答案 0 :(得分:0)

对于多个索引使用名称CustomerId可能存在问题。

尝试将索引的名称从CustomerId更改为类似ContactData_CustomerIdContactDetailData_CustomerId的内容(对于您未向我们展示的任何其他索引,类似)。

我在Sterling文档中找不到任何暗示名称必须唯一的内容。尽管如此,当我使用Sterling时,我给了所有索引不同的名字,我没有任何这样的问题。

(顺便说一下,将所有索引名称移动到字符串常量中也可能是个好主意。这应该有助于避免错误输入,并且还应该为它们提供IntelliSense支持。)

答案 1 :(得分:0)