Silverlight: Исключения из стерлинговых бросков - PullRequest
2 голосов
/ 17 июля 2011

У меня есть стерлинговая служба

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

Пожалуйста, дайте мне знать, где я делаю неправильно.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 октября 2011
0 голосов
/ 17 июля 2011

Возможно, проблема в том, что вы используете имя CustomerId для нескольких индексов.

Попробуйте изменить имена ваших индексов с CustomerId на что-то вроде ContactData_CustomerId и ContactDetailData_CustomerId (и аналогично для любых других индексов, которые вы нам не показали).

Я не могу найти ничего в документации по Sterling, которая предполагает, что имена должны быть уникальными.Тем не менее, когда я использовал Sterling, я дал всем своим индексам разные имена, и у меня не было таких проблем.

(Кроме того, было бы также неплохо перенести все ваши имена индексов в строкугде-то константы. Это должно помочь избежать их неправильного ввода, и вы также должны получить поддержку IntelliSense для них.)

...