Раньше сегодня я выслеживал очень странную ошибку ... Я наконец-то отследил ее
вплоть до того, что кажется причиной проблемы.
С оригинальным отчетом можно ознакомиться здесь: Оригинальный вопрос
Детали изменились настолько, чтобы оправдать новый вопрос.
Может показаться, что мое приложение иногда, НЕ ВСЕ ВРЕМЯ, зависает
когда он достигает следующего запроса LINQ:
using (NetworkDatabaseContext db = new
NetworkDatabaseContext(UISession.ConnectionString))
{
Ballast ballast = db.Ballasts.FirstOrDefault(b => b.NetworkId == UISession.NetworkId &&
b.ShortAddress == this.innerBallast.ShortAddress && b.ControllerSerial == this.controllerSerial);
Вот как это выглядит:
В большинстве случаев это работает просто отлично ... но время от времени оно блокируется.
Этот код является частью класса BallastListItem. Элементы этого класса привязаны к ListBox на странице:
<ListView Name="lstBallasts" Margin="5" DockPanel.Dock="Top" MinHeight="100"><!-- The MinHeight is used to get a good view in the designer -->
<ListView.View>
<GridView>
<GridViewColumn Header="Address" DisplayMemberBinding="{Binding InnerBallast.ShortAddress}" Width="70"/>
<GridViewColumn Header="Name" Width="300">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Name="txtBallastDisplayName" Text="{Binding DisplayName}" Width="270" MaxWidth="270" MaxLength="100"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Type" DisplayMemberBinding="{Binding DeviceType}" Width="150"/>
<GridViewColumn Header="Status" DisplayMemberBinding="{Binding InnerBallast.StandardVersion}" Width="150"/>
</GridView>
</ListView.View>
</ListView>
Код является частью метода получения свойства DisplayName:
public string DisplayName
{
get
{
using (NetworkDatabaseContext db = new NetworkDatabaseContext(UISession.ConnectionString))
{
Ballast ballast = db.Ballasts.FirstOrDefault(b => b.NetworkId == UISession.NetworkId &&
b.ShortAddress == this.innerBallast.ShortAddress && b.ControllerSerial == this.controllerSerial);
Таким образом, этот код вызывается, когда происходит привязка данных, должен был понять, что раньше.
Тем не менее я понятия не имею, почему это иногда вызывает проблемы ...
UPDATE
В обоих случаях (когда приложение зависает, а когда нет)
состояние соединения «Закрыто» непосредственно перед кодом запроса, как я вижу из:
db.Connection.State.ToString()
ОБНОВЛЕНИЕ 2
Я забыл упомянуть, что переместил этот код из геттера,
так что это только один раз. Должно быть спал во время реализации
это первый раз. Код теперь работает нормально, хотя на XP ... каждый сейчас
и затем, но гораздо реже проблема все еще возникает.
* ОБНОВЛЕНИЕ 3 *
Просто чтобы быть ясно, я использую базу данных SQL Compact с очень небольшим количеством данных