Я пишу программу UWP с БД SQLite. Программа использует универсальную библиотеку Windows, которая содержит статический класс, управляющий БД. В исключении Stack Trace я вижу все методы sqlite, даже если он не достигает точек останова, которые я установил в классе DB Manager.
Модель, на которой строится БД:
public class UserModel
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public bool Connected { get; set; }
}
Статический менеджер БД:
public static class UsersManager
{
public static event EventHandler NewConnectionHandler=delegate { };
private static string _path;
private static SQLiteConnection _conn;
static UsersManager()
{
_path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "usersdb.sqlite");
_conn = new SQLiteConnection(new SQLitePlatformWinRT(), _path);
_conn.CreateTable<UserModel>();
}
private static void OnNewConnection()
{
NewConnectionHandler.Invoke(null, EventArgs.Empty);
}
public static void Add(UserModel user)
{
_conn.Insert(user);
}
public static void Delete(int userId)
{
_conn.Delete<UserModel>(userId);
}
public static bool Contains(string name)
{
bool flag = false;
var user = _conn.Find<UserModel>(u => u.Name == name);
if (user != null)
flag = true;
return flag;
}
public static void ConnectUser(UserModel connectedUser,HubConnection hubConnection ,IHubProxy hubProxy)
{
_conn.Find<UserModel>(connectedUser).Connected = true;
_conn.Update(connectedUser);
var queryStringData = new Dictionary<string, string>();
queryStringData.Add("username", connectedUser.Name);
hubConnection = new HubConnection("http://127.0.0.1:8080", queryStringData);
hubProxy = hubConnection.CreateHubProxy("ChatHub");
if (hubConnection.State != ConnectionState.Connected)
{
hubConnection.Start();
}
OnNewConnection();
}
public static ObservableCollection<UserModel> ConnectedUsers
{
get
{
var allUsers = _conn.Table<UserModel>();
ObservableCollection<UserModel> disconnectedUsers = new ObservableCollection<UserModel>();
ObservableCollection<UserModel> connectedUsers = new ObservableCollection<UserModel>();
foreach (var user in allUsers)
{
if (user.Connected)
connectedUsers.Add(user);
}
return connectedUsers;
}
}
public static ObservableCollection<UserModel> DisconnectedUsers
{
get
{
var allUsers = _conn.Table<UserModel>();
ObservableCollection<UserModel> disconnectedUsers = new ObservableCollection<UserModel>();
foreach (var user in allUsers)
{
if (!user.Connected)
disconnectedUsers.Add(user);
}
return disconnectedUsers;
}
}
}
, где возникает исключение:
private void SignIn(object sender, RoutedEventArgs e)
{
if (userViewModel.SignIn()) //here right after trying execute SignIn()
{
Frame.Navigate(typeof(ContactsView), userViewModel);
}
}
Метод SignIn в UserViewModel:
public bool SignIn()
{
bool flag = false;
if (Name == null || Password == null)
{
Error = "Name or password wasnt filled";
}
else if (UsersManager.Contains(Name) && !UserSettings.IsNameExict(Name))
{
Error = "Name already in use choose diffrent one";
}
else
{
UserModel user = new UserModel
{
Name = Name,
Password = Password,
};
if (!UsersManager.Contains(Name))
{
UsersManager.Add(user);
UserSettings.SaveUserName(Name);
}
UsersManager.ConnectUser(user,_hubConnection, _hubProxy);
flag = true;
}
return flag;
}
Надеюсь, вы, ребята, помогите мне, я действительно пытался найти ответ на этот вопрос. Спасибо
Редактировать 1:
Запустите программу еще раз сегодня, и кажется, что: программа выдает исключение в классе UsersManager следующим способом:
public static void ConnectUser(UserModel connectedUser,HubConnection hubConnection ,IHubProxy hubProxy)
{
_conn.Find<UserModel>(connectedUser).Connected = true;//In this line!!!
_conn.Update(connectedUser);
var queryStringData = new Dictionary<string, string>();
queryStringData.Add("username", connectedUser.Name);
hubConnection = new HubConnection("http://127.0.0.1:8080", queryStringData);
hubProxy = hubConnection.CreateHubProxy("ChatHub");
if (hubConnection.State != ConnectionState.Connected)
{
hubConnection.Start();
}
OnNewConnection();
}