В этом конкретном случае для запуска задачи требуется viewModel и уведомлять представление о его завершении. «Асинхронное свойство», а не «асинхронный конструктор», находится в порядке.
Я только что выпустил AsyncMVVM , который решает именно эту проблему (среди прочего). Если вы его используете, ваша ViewModel станет:
public class ViewModel : AsyncBindableBase
{
public ObservableCollection Data
{
get { return Property.Get(GetDataAsync); }
}
private Task> GetDataAsync()
{
//Get the data asynchronously
}
}
Как ни странно, Silverlight поддерживается. :)
Как сказал Роб - не храните весь большой идентификатор в своей таблице - просто сохраните ту часть, которая изменяется - порядковый номер.
Если вам действительно нужен весь идентификатор в таблице, например для его отображения вы можете использовать вычисляемый столбец:
ALTER TABLE dbo.MyTable
ADD DisplayID AS '24-073110-' + RIGHT('00' + CAST(ID AS VARCHAR(2)), 2) PERSISTED
Таким образом, ваш INT IDENTITY будет использоваться как INT и всегда будет содержать числовое значение, и оно будет автоматически увеличиваться SQL Server.
Ваше поле DisplayID
затем будет содержать такие значения, как:
ID DisplayID
1 24-073110-01
2 24-073110-02
12 24-073110-12
13 24-073110-03
21 24-073110-21
Поскольку это постоянное поле, оно теперь является частью вашей таблицы, и вы можете запрашивать по нему и даже помещать в него индекс, чтобы запросы быстрее:
SELECT (fields) FROM dbo.MyTable WHERE DisplayID = '24-073110-59'
Обновление:
Я бы определенно не использовал DisplayID
в качестве первичного ключа - для этого отлично подходит столбец ID IDENTITY
для создания индекса для DisplayID
на самом деле не отличается от создания индекса для любого другого столбца в вашей таблице:
СОЗДАТЬ НЕКЛЮЧЕНЫЙ ИНДЕКС SomeIndex ON dbo.MyTable (DisplayID)
Если часть данных 24-073110-
всегда будет одинаковой, хранить ее в базе данных практически нет смысла. Учитывая, что вы сказали, что компонент XX
- это числовое значение, которое увеличивается на единицу, я бы предложил создать вашу таблицу аналогично этому:
CREATE TABLE [dbo].[MyTable]
(
MyTableId INT IDENTITY(1,1) NOT NULL,
/*
Other columns go here
*/
)
Таким образом, вы можете позволить базе данных беспокоиться о вставка уникальных автоматически увеличивающихся значений для вашего первичного ключа.