链接数据库、添加数据库列或在应用程序中使用转换器的友好名称
本文关键字:数据库 转换器 添加 应用程序 链接 | 更新日期: 2023-09-27 18:31:52
我有一个使用 MVVM 模式和 MVVM Light Tookkit 的 WPF 应用程序,它正在访问 MSSQL 服务器。 下面是一个示例数据库(我拥有的数据库更复杂):
Employee Table:
|Name | ShipToLocation
---------------|--------------------
|John | 1
ShipToLocation Table:
|Code | CityName
------|------------------
| 1 | New York
我已经使用EntityFramwork从我的数据库表中创建对象。 我现在遇到的问题是在我的程序中,我不得不使用很多IValueConverters,例如:
<ListBox Grid.Row="1" Grid.ColumnSpan="3" ItemsSource="{Binding Employees}" HorizontalContentAlignment="Stretch" SelectedItem="{Binding ThisEmployee}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource IntToShipTo}">
<Binding Path="VendorCode" Mode="OneWay"/>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.ShipToLocations"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的 ViewModel 中,有一个名为"员工"的属性,其中包含 Emplyoyee 列表,还有一个名为"收货到位置"的属性,其中包含所有"收货地点"的列表。我必须使用 RelativeSource 才能访问 ShipToLocations 属性,因为 ListBox 的 ItemSource 设置为"员工",这会导致设计时视图问题
我在很多地方都有这种链接,我需要为每个地方制作一个转换器。 这似乎是很多开销,也是单元测试的噩梦。
我想知道的是,在我的员工表中添加一个名为 ShipToFriendlyName 的列,然后在 ShipToLocation 字段上附加一个触发器,该触发器将在 int 更改时更新 frienldy 名称,这是否是一种不好的做法。 这样可以避免每次我需要找出整数的友好名称时都需要进行数据库调用。 谢谢
我想知道的是,这会不会是不好的做法...
是的,这将是非常糟糕的做法。