如何使用DataGrid和实体框架直接处理M:M关系

时间:2019-02-06 00:54:14

标签: c# wpf entity-framework wpfdatagrid

使用EF6的数据库优先方法,我目前希望在一个WPF页面中建立两个M:N关系的实体(用户和角色)。我的目标是在主从关系中有2个数据网格,它们支持嵌入式编辑-顶部将显示所有用户,底部将显示所选用户的角色。我已经通过内联编辑成功地实现了用户数据网格,但是,在第二个数据网格上编辑记录时,它直接更改了Roles表,而不是关系。

Window 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行设置窗口加载时Users Datagrid的ItemsSource:

context.Users.Include(a => a.Roles).Load();
DataGridUsers.ItemsSource = context.Users.Local;

当在Users Datagrid上所做的选择更改时,我使用以下内容来设置Roles Data Grid ItemsSource。

var CurrentUser = DataGridUsers.SelectedItem as User;
DataGridUserRoles.ItemsSource = context.Roles.Local.Where(x => x.Users.Any(y => y.UserID == CurrentUser.UserID)).ToList();

这会根据UsersRoles表中的条目将值正确填充到Roles数据网格中。

我所有的保存都由表单上的通用保存按钮处理,该按钮异步保存整个上下文。

    private async void SaveAll()
    {
        await (context.SaveChangesAsync());
    }

编辑“角色数据”网格时,我直接在“角色”表中而不是在UsersRoles联结表中操纵数据。我的目标是让最下面的表直接更新UsersRoles表,以便可以通过应用程序管理用户权限。如何调整Roles数据网格的绑定以实现此目的?

0 个答案:

没有答案