Использование базы данных Первый подход с EF6, в настоящее время у меня есть 2 сущности в отношении M: N (пользователи и роли), которые я хотел бы установить на одной странице WPF.Моя цель состоит в том, чтобы иметь 2 сетки данных в отношении «мастер-детализация», которые поддерживают встроенное редактирование - верхняя часть отображает всех пользователей, а нижняя - роли выбранного пользователя.Я успешно реализовал пользовательскую сетку данных с помощью встроенного редактирования, но при редактировании записей во второй сетке данных она напрямую изменяет таблицу ролей, а не отношение.
Окно XAML:
<DataGrid Name="DataGridUsers" AutoGenerateColumns="False" IsTextSearchEnabled="True" SelectionChanged="DataGridUsers_SelectionChanged" Margin="15" MaxHeight="300" CellEditEnding="DataGridUsers_CellEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Username, Mode=TwoWay}" Header="Username"/>
<DataGridTextColumn Binding="{Binding FirstName, Mode=TwoWay}" Header="First Name" />
<DataGridTextColumn Binding="{Binding LastName, Mode=TwoWay}" Header="Last Name"/>
<DataGridTextColumn Binding="{Binding email, Mode=TwoWay}" Header="Email"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid Name="DataGridUserRoles" AutoGenerateColumns="False" Margin="15" CellEditEnding="DataGridUserRoles_CellEditEnding" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding RoleName, Mode=TwoWay}" Header="Role Name" />
</DataGrid.Columns>
</DataGrid>
Я использую следующие 2 строки для установки источника элементов для сетки данных пользователей при загрузке окна:
context.Users.Include(a => a.Roles).Load();
DataGridUsers.ItemsSource = context.Users.Local;
Когда выбор изменяется в сетке данных пользователей, я использую следующее для установки данных ролейСетка ItemsSource.
var CurrentUser = DataGridUsers.SelectedItem as User;
DataGridUserRoles.ItemsSource = context.Roles.Local.Where(x => x.Users.Any(y => y.UserID == CurrentUser.UserID)).ToList();
Это правильно заполняет значения в таблице данных Roles на основе записей в таблице UsersRoles.
Все мои сохранения обрабатываются общей кнопкой сохранения в форме, которая сохраняет всеконтекст асинхронно.
private async void SaveAll()
{
await (context.SaveChangesAsync());
}
Когда я редактирую сетку данных ролей, я непосредственно манипулирую данными в моей таблице ролей, а не в таблице соединений UsersRoles.Моя цель состоит в том, чтобы нижняя таблица напрямую обновляла таблицу UsersRoles, чтобы разрешениями пользователя можно было управлять через приложение.Как настроить привязку для сетки данных ролей, чтобы добиться этого?